我有这样的json:
{
"users":{
"1234":{
"firstname":"Joe",
"lastname":"Smith"
},
"9876":{
"firstname":"Bob",
"lastname":"Anderson"
}
},
"jobs":[
{
"id":"abc",
"location":"store"
},
{
"id":"def",
"location":"factory"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Jackson解析这个,所以我一直使用以下方法解析响应:readvalue(json,MyCustomClass.class)
MyCustomClass的样子
public class MyCustomClass{
@JsonProperty("jobs")
ArrayList<Job> jobs;
@JsonProperty("users")
ArrayList<UserMap> usersMap;
}
Run Code Online (Sandbox Code Playgroud)
现在,作业完全解析为Jobs对象,但由于它们具有动态密钥,因此无法让用户进行解析.我读到了JsonAnyGetter/Setter,并尝试制作映射字符串的UserMap对象映射 - > User,如:
public class UserMap {
private HashMap<String,User> usersMap;
@JsonAnySetter
public void add(String key, User user){
usersMap.put(key, user);
}
@JsonAnyGetter
public Map<String, User> getUsersMap(){
return usersMap;
}
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我想我可以使用TypeReference包装器做到这一点,但如果这些地图是我回来的唯一类型,我只能想到一种方法.由于我得到不同的类型(用户和工作)是否可以这样做?
我试图达到类似这个的效果:
我现在在做什么:
public MaskedTextView(Context context, AttributeSet attrs) {
super(context, attrs);
p = new Paint(Paint.ANTI_ALIAS_FLAG);
p.setTextSize(25);
p.setColor(Color.GREEN);
pReplace = new Paint(p);
pReplace.setColor(Color.BLUE);
pReplace.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
pMask = new Paint();
int lightGradientColor = getResources().getColor(R.color.dailyGoalLowLight);
int darkGradientColor = getResources().getColor(R.color.dailyGoalLowDark);
Shader shader = new LinearGradient(0, 0, 150, 0, lightGradientColor, darkGradientColor, Shader.TileMode.CLAMP);
pMask.setShader(shader);
pMask.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.save();
if (!Utils.isEmpty(sText)) {
canvas.drawText(sText, 150, getHeight() / 2, p);
canvas.drawRect(0, 0, 180, getHeight(), pMask);
canvas.drawText(sText, 150, getHeight()/2, pReplace);
}
canvas.restore();
}
Run Code Online (Sandbox Code Playgroud)
这导致: …
android android-custom-view porter-duff android-view android-paint
我已经阅读了很多关于这个主题的帖子,但对我来说还是有点不清楚.我知道你不能Realm跨不同的线程访问类或领域对象,所以我想知道处理它的最佳方法是什么.
我有一个启动线程的服务.该线程执行后台工作(包括通过rxjavaon 工作Schedulers.io).现在在某一点上,我想将一些数据保存到存在于DataManager类中的领域.最初我Dagger2用来注入Realm我的DataManager类(它本身被注入到服务中).但是这不起作用,因为注入是在主线程上完成的,因此Realm.getDefaultInstance()绑定到主线程但是在DataManager中从不同的线程访问它.
我能想到的唯一可行的选择是调用Realm.getDefaultInstance()并realm.close()在每个执行事务的方法的开头和结尾.我不介意这样做,但我想知道Realm.getDefaultInstance()每次我想要保存对象时是否会有性能命中.有一个更好的方法吗?提前致谢.
我正在膨胀一些EditTexts并将它们添加到LinearLayout:
private void setupCommentViews(){
int i = 0;
Iterator<CommentInformation> iterator = commentInformations.iterator();
while(iterator.hasNext()) {
i++;
View v = LayoutInflater.from(context).inflate(R.layout.comment_row_item, commentsContainer, false);
EditText commentField = (EditText)v.findViewById(R.id.comment);
CommentInformation commentInformation = iterator.next();
final String uniqueId = commentInformation.getUniqueId();
String currentCommentText = comments.get(uniqueId);
if(currentCommentText != null) {
Log.v("into","Setting old text: "+currentCommentText);
commentField.setText(currentCommentText);
} else {
Log.v("into","Setting empty text: "+i);
commentField.setText("Setting empty text: "+i);
}
commentField.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override …Run Code Online (Sandbox Code Playgroud) android android-layout screen-rotation android-edittext layout-inflater
所以我试图通过意图将一个我创建的类的实例传递给一个新的活动.
public class Room implements Serializable{
/**
*
*/
private static final long serialVersionUID = 6857044522819206055L;
int roomID;
String roomName;
ArrayList<MarkerHolder> markerHolders = new ArrayList<MarkerHolder>();
public int getRoomID() {
return roomID;
}
public void setRoomID(int roomID) {
this.roomID = roomID;
}
public String getRoomName() {
return roomName;
}
public void setRoomName(String roomName) {
this.roomName = roomName;
}
public ArrayList<MarkerHolder> getMarkerHolders() {
return markerHolders;
}
public void setMarkerHolders(ArrayList<MarkerHolder> markerHolders) {
this.markerHolders = markerHolders;
}
}
public class MarkerHolder implements Serializable{
/** …Run Code Online (Sandbox Code Playgroud) android android-intent intentservice notserializableexception
我有一个webview,我将onTouchListener设置为on以便捕获实际视图上的滑动事件。
我还在WebView上设置了WebViewClient,以便在单击Webview内的某些链接时覆盖“网址加载”。
问题是OnTouch处理程序总是始终首先接收操作,即使我返回false(如果不是轻扫),它也不会将touch事件传递给内部html内容,因此从不实际单击链接。如果我删除了onTouchListener,它可以正常工作。是否可以通过某种方式将触摸事件传递给内容?
我对android有点新,我正试图弄清楚这些自定义列表适配器.所以我有一个扩展BaseListActivity的活动和一个类似的函数:
public void inflate(){
ArrayList<String> words = new ArrayList<String>();
orders.add("hello");
orders.add("world");
wordsList = (ListView) findViewById(R.id.list);
WordsAdapter adapter = new WordsAdapter(this, R.layout.single_word_container_item,words);
wordsList.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
然后我按如下方式实现我的自定义WordsAdapter:
public class WordsAdapter extends ArrayAdapter<String>{
public Context context;
public ArrayList<String> _words;
//not sure the purpose of 'a' here
public WordsAdapter(Context context, int a, ArrayList<String> words) {
super(context, a, words);
_words = words;
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.single_word_container_item, null);
TextView …Run Code Online (Sandbox Code Playgroud) android ×7
java ×3
android-view ×1
jackson ×1
json ×1
listadapter ×1
porter-duff ×1
realm ×1
webview ×1