繁体   English   中英

消息未在android的调用布局中显示

[英]Message is not being displayed in the called layout in android

我正在做一个从JSON读取消息值的聊天机器人。 通常,在聊天中,发送的消息在屏幕的左侧,而收到的消息在屏幕的右侧。 但是,运行我的应用程序后,所有消息都将包含在右侧。

The sent message's layout is: my_message.xml
The received message's layout is: their_message.xml

问题是尽管跟踪使用的if条件显示应在左侧显示消息之一,但所有消息都使用my_message显示。

在下面可以找到我的代码。

protected Void doInBackground(Void... arg0) {
    String jsonStr = null;
    jsonStr = jsonManagement.loadJSONFromAsset("contacts.json", mContext);

    Log.e(TAG, "Response from url: " + jsonStr);
    if (jsonStr != null) {
        try {
            JSONObject jsonObj = new JSONObject(jsonStr);
            JSONArray contacts = jsonObj.getJSONArray("contacts");

            for (int i = 0; i < contacts.length(); i++) {
                JSONObject c = contacts.getJSONObject(i);
                final String id = c.getString("id");
                String name = c.getString("name");
                String email = c.getString("email");
                String address = c.getString("address");
                String gender = c.getString("gender");

                JSONObject phone = c.getJSONObject("phone");
                String mobile = phone.getString("mobile");
                String home = phone.getString("home");
                String office = phone.getString("office");

                HashMap<String, String> contact = new HashMap<>();

                contact.put("id", id);
                contact.put("name", name);
                contact.put("email", email);
                contact.put("mobile", mobile);

                contactList.add(contact);
            }

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    for (int j = 0 ; j < contactList.size() ; j++){
                        Log.e(TAG, "contactList " + contactList.get(j).get("id"));
                        if (contactList.get(j).get("id").equals("c200") ) {
                            Log.e(TAG, "their message " );
                            ListAdapter adapter = new SimpleAdapter(MainActivity.this, contactList,
                                    R.layout.their_message, new String[]{  "email","mobile"},
                                    new int[]{ R.id.name, R.id.message_body});
                            lv.setAdapter(adapter);
                        } else {
                            Log.e(TAG, "my message ");
                            ListAdapter adapter = new SimpleAdapter(MainActivity.this, contactList,
                                    R.layout.my_message, new String[]{ "email","mobile"},
                                    new int[]{R.id.message_body, R.id.message_body});
                            lv.setAdapter(adapter);
                        }
                    }
                }
            });

        } catch (final JSONException e) {
            Log.e(TAG, "Json parsing error: " + e.getMessage());
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(),
                            "Json parsing error: " + e.getMessage(),
                            Toast.LENGTH_LONG).show();
                }
            });
        }
    } else {
        Log.e(TAG, "Couldn't get json from server.");
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(),
                        "Couldn't get json from assets.
                        Toast.LENGTH_LONG).show();
            }
        });
    }

    return null;
}

在下面,您将找到堆栈跟踪:

2019-08-22 19:47:42.824 24525-24525/com.abc.jsonTest E/MainActivity: contactList c200
2019-08-22 19:47:42.825 24525-24525/com.abc.jsonTest E/MainActivity: their message 
2019-08-22 19:47:42.830 24525-24525/com.abc.jsonTest E/MainActivity: contactList c201
2019-08-22 19:47:42.830 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.835 24525-24525/com.abc.jsonTest E/MainActivity: contactList c202
2019-08-22 19:47:42.835 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.836 24525-24525/com.abc.jsonTest E/MainActivity: contactList c203
2019-08-22 19:47:42.836 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.838 24525-24525/com.abc.jsonTest E/MainActivity: contactList c204
2019-08-22 19:47:42.838 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.839 24525-24525/com.abc.jsonTest E/MainActivity: contactList c205
2019-08-22 19:47:42.840 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.841 24525-24525/com.abc.jsonTest E/MainActivity: contactList c206
2019-08-22 19:47:42.842 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.843 24525-24525/com.abc.jsonTest E/MainActivity: contactList c207
2019-08-22 19:47:42.843 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.844 24525-24525/com.abc.jsonTest E/MainActivity: contactList c208
2019-08-22 19:47:42.844 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.845 24525-24525/com.abc.jsonTest E/MainActivity: contactList c209
2019-08-22 19:47:42.846 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.846 24525-24525/com.abc.jsonTest E/MainActivity: contactList c2010
2019-08-22 19:47:42.847 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.847 24525-24525/com.abc.jsonTest E/MainActivity: contactList c2011
2019-08-22 19:47:42.848 24525-24525/com.abc.jsonTest E/MainActivity: my message 
2019-08-22 19:47:42.848 24525-24525/com.abc.jsonTest E/MainActivity: contactList c2012
2019-08-22 19:47:42.849 24525-24525/com.abc.jsonTest E/MainActivity: my message 

如何使消息及其消息显示在左侧? 当前显示在右侧。

提前致谢。

您的实现存在一些问题。 您不必为列表中的每个项目创建适配器。 相反,您可以考虑编写一个接受列表的自定义适配器,并在绑定每个项目的视图时,设置将要使用的项目的布局。

您可能考虑研究此答案 ,以了解实现在您的情况下应如何工作。 希望对您有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM