gpt4 book ai didi

java - 消息未显示在 Android 中的调用布局中

转载 作者:行者123 更新时间:2023-12-02 01:22:20 25 4
gpt4 key购买 nike

我正在做一个从 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

如何让他们的消息显示在左侧?它当前显示在右侧。

提前致谢。

最佳答案

您的实现存在一些问题。您不必为列表中的每个项目创建适配器。相反,您可能会考虑编写一个自定义适配器来获取列表,并在绑定(bind)每个项目的 View 时,设置将使用的项目的布局。

您可以考虑查看this answer了解在您的案例中实现应如何进行。我希望这有帮助!

关于java - 消息未显示在 Android 中的调用布局中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57614139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com