Android 无法显示好友';聊天时的姓名

Android 无法显示好友';聊天时的姓名,android,json,Android,Json,我无法在聊天中显示朋友的姓名。每次运行时,应用程序都会强制关闭以显示朋友的姓名。如果我为好友的名字注释该部分,则消息可能会显示良好。但当我为name添加标签时,它出现了错误并强制关闭。我真的需要帮助,任何人都请帮助我。多谢各位 json部分 if(!content.equals("null")){ try{ JSONArray jArr = new JSONArray(content);

我无法在聊天中显示朋友的姓名。每次运行时,应用程序都会强制关闭以显示朋友的姓名。如果我为好友的名字注释该部分,则消息可能会显示良好。但当我为name添加标签时,它出现了错误并强制关闭。我真的需要帮助,任何人都请帮助我。多谢各位

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");

                                     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,在postexecute
if(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();
                        }
                    }