Android 无法显示好友';聊天时的姓名
我无法在聊天中显示朋友的姓名。每次运行时,应用程序都会强制关闭以显示朋友的姓名。如果我为好友的名字注释该部分,则消息可能会显示良好。但当我为name添加标签时,它出现了错误并强制关闭。我真的需要帮助,任何人都请帮助我。多谢各位 json部分Android 无法显示好友';聊天时的姓名,android,json,Android,Json,我无法在聊天中显示朋友的姓名。每次运行时,应用程序都会强制关闭以显示朋友的姓名。如果我为好友的名字注释该部分,则消息可能会显示良好。但当我为name添加标签时,它出现了错误并强制关闭。我真的需要帮助,任何人都请帮助我。多谢各位 json部分 if(!content.equals("null")){ try{ JSONArray jArr = new JSONArray(content);
if(!content.equals("null")){
try{
JSONArray jArr = new JSONArray(content);
// String messages="";
for(int i=0; i < jArr.length() ; i++){
JSONObject jObj = jArr.getJSONObject(i);
String name = jObj.getString("firstname");
String message = jObj.getString("message");
friendLabel.setText(name);
showMessage(message, false);
}
}catch(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
Toast.makeText(ChatRoom.this, "Error", Toast.LENGTH_LONG).show();
}
你所有的酒席、祝酒词等。。。操作应该在UI线程中完成 例如,类似于:
friendLabel.setText(name)代码>
为了解决这个问题,我建议您在onPostExecute中执行以下操作:
@Override
protected void onPostExecute(JSONArray result) {
updateUI();// Do whatever you want here
}
发件人:
onPostExecute(Result),在后台的UI线程上调用
计算完成。背景计算的结果是
作为参数传递到此步骤
使人名变得动态
public void showPerson(String friendname, boolean leftSide) {
final TextView textView = new TextView(ChatRoom.this);
textView.setTextColor(Color.BLACK);
textView.setTextSize(12);
textView.setText(friendname);
int bgName = R.id.meLabel;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if (!leftSide) {
bgName = R.id.friendLabel;
params.gravity = Gravity.RIGHT;
}
textView.setLayoutParams(params);
textView.setId(bgName);
runOnUiThread(new Runnable() {
@Override
public void run() {
messagesContainer.addView(textView);
// Scroll to bottom
if (scrollContainer.getChildAt(0) != null) {
scrollContainer.scrollTo(scrollContainer.getScrollX(), scrollContainer.getChildAt(0).getHeight());
}
scrollContainer.fullScroll(View.FOCUS_DOWN);
}
});
}
所以json部分变成这样
if(!content.equals("null")){
try{
JSONArray jArr = new JSONArray(content);
// String messages="";
for(int i=0; i < jArr.length() ; i++){
JSONObject jObj = jArr.getJSONObject(i);
String name = jObj.getString("firstname");
String message = jObj.getString("message");
showPerson(name, false);
showMessage(message, false);
}
}catch(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(!content.equals(“null”)){
试一试{
JSONArray jArr=新JSONArray(内容);
//字符串消息=”;
对于(inti=0;i
Waza_-Be,在postexecuteif(result==null){Toast.makeText(ChatRoom.this,“Error”,Toast.LENGTH_-LONG).show()}else{friendLabel.setText(name);showMessage(message,false);}中是这样的还是错误的?非常感谢你,如果我这样做,并初始化名称和消息,在我的聊天室将不会出现任何东西,结果显示在logcat只。我很确定你遗漏了一些东西,我在很多不同的应用程序中都有这段代码,这很好。检查字段和一些空值我想问一下,logcat中View.requestlayout的含义是什么?O.O XML或.java有什么问题吗?非常感谢你我不知道。。。重要的部分是上面的两行:CalledFromErrorThreadException:只有创建视图层次结构的原始线程才能接触其视图=>这意味着您需要在UI线程中工作您已经找到解决方案了吗?@Bigflow,非常感谢您的回复。是的,我已经找到了,我必须使人名变得动态。:)如果你得到了这个问题的答案,你也可以自己回答并接受它。它可以帮助其他人了解你是如何修复它的:)@Bigflow,我可以问更多的问题吗。我需要帮助解决这个问题。。如果你有时间,可以看看这个问题[链接]。非常感谢你。
public void showPerson(String friendname, boolean leftSide) {
final TextView textView = new TextView(ChatRoom.this);
textView.setTextColor(Color.BLACK);
textView.setTextSize(12);
textView.setText(friendname);
int bgName = R.id.meLabel;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
if (!leftSide) {
bgName = R.id.friendLabel;
params.gravity = Gravity.RIGHT;
}
textView.setLayoutParams(params);
textView.setId(bgName);
runOnUiThread(new Runnable() {
@Override
public void run() {
messagesContainer.addView(textView);
// Scroll to bottom
if (scrollContainer.getChildAt(0) != null) {
scrollContainer.scrollTo(scrollContainer.getScrollX(), scrollContainer.getChildAt(0).getHeight());
}
scrollContainer.fullScroll(View.FOCUS_DOWN);
}
});
}
if(!content.equals("null")){
try{
JSONArray jArr = new JSONArray(content);
// String messages="";
for(int i=0; i < jArr.length() ; i++){
JSONObject jObj = jArr.getJSONObject(i);
String name = jObj.getString("firstname");
String message = jObj.getString("message");
showPerson(name, false);
showMessage(message, false);
}
}catch(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}