小编pat*_*pat的帖子

杰克逊解析包含对象数组和带动态键的地图数组的JSON

我有这样的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包装器做到这一点,但如果这些地图是我回来的唯一类型,我只能想到一种方法.由于我得到不同的类型(用户和工作)是否可以这样做?

java android json jackson

7
推荐指数
1
解决办法
9396
查看次数

使用蒙版显示带有2种不同颜色的TextView

我试图达到类似这个的效果:

在此输入图像描述

我现在在做什么:

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

7
推荐指数
1
解决办法
344
查看次数

使用rxjava和dagger2跨线程访问领域

我已经阅读了很多关于这个主题的帖子,但对我来说还是有点不清楚.我知道你不能Realm跨不同的线程访问类或领域对象,所以我想知道处理它的最佳方法是什么.

我有一个启动线程的服务.该线程执行后台工作(包括通过rxjavaon 工作Schedulers.io).现在在某一点上,我想将一些数据保存到存在于DataManager类中的领域.最初我Dagger2用来注入Realm我的DataManager类(它本身被注入到服务中).但是这不起作用,因为注入是在主线程上完成的,因此Realm.getDefaultInstance()绑定到主线程但是在DataManager中从不同的线程访问它.

我能想到的唯一可行的选择是调用Realm.getDefaultInstance()realm.close()在每个执行事务的方法的开头和结尾.我不介意这样做,但我想知道Realm.getDefaultInstance()每次我想要保存对象时是否会有性能命中.有一个更好的方法吗?提前致谢.

java multithreading android realm

6
推荐指数
1
解决办法
318
查看次数

在多个膨胀的EditTexts上设置文本会导致在旋转后使用相同的文本填充所有文本

我正在膨胀一些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

5
推荐指数
1
解决办法
1198
查看次数

自定义类 - Android上不可序列化的异常

所以我试图通过意图将一个我创建的类的实例传递给一个新的活动.

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

4
推荐指数
1
解决办法
2656
查看次数

Android将触摸事件传递给WebView的内部内容

我有一个webview,我将onTouchListener设置为on以便捕获实际视图上的滑动事件。

我还在WebView上设置了WebViewClient,以便在单击Webview内的某些链接时覆盖“网址加载”。

问题是OnTouch处理程序总是始终首先接收操作,即使我返回false(如果不是轻扫),它也不会将touch事件传递给内部html内容,因此从不实际单击链接。如果我删除了onTouchListener,它可以正常工作。是否可以通过某种方式将触摸事件传递给内容?

android webview ontouchlistener webviewclient

4
推荐指数
1
解决办法
1万
查看次数

获取自定义列表适配器以正确膨胀多个线性布局

我对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)

java android listadapter custom-adapter

2
推荐指数
1
解决办法
1万
查看次数