java - 消息未显示在android中的调用布局中
问题描述
我正在做一个从 JSON 读取消息值的聊天机器人。通常在聊天中,发送的消息位于屏幕左侧,接收的消息位于右侧。但是,运行我的应用程序后,所有消息都包含在右侧。
The sent message's layout is: my_message.xml
The received message's layout is: their_message.xml
问题是所有消息都在显示,my_message
尽管跟踪使用的 if 条件显示其中一条消息应该显示在左侧。
您可以在下面找到我的代码。
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
我怎样才能在左侧显示他们的消息?它目前显示在右侧。
提前致谢。
解决方案
你的实现有一些问题。您不必为列表中的每个项目创建一个适配器。相反,您可能会考虑编写一个自定义适配器来获取列表,并在绑定每个项目的视图时,设置将要使用的项目的布局。
您可能会考虑查看此答案,以了解实现在您的情况下应如何工作。我希望这会有所帮助!
推荐阅读
- c# - 我需要程序停止询问用户名和密码是否正常
- python - Python 错误:尝试从字典中打印响应时解包的值太多
- sql - How to match results of TRIM to column in table for a JOIN
- mysql - MySQL 分区创建后是否需要特殊查询才能利用?
- flutter - 在未来的构建器中使用列表构建器时出现颤振播种错误
- javascript - 正确使用 click:outside 和 vuetify 对话框
- python - 如何在我的代码中添加冷却消息?
- c# - 如何通过具有不同设定值的索引获取枚举?
- android - 列表内的 EditText。EditText.TextChanged 在滚动时给出错误的值
- node.js - Passport-saml 元数据 xml 配置