handler处理2个setText怎么弄 报空指针

我有2个按钮 先点扫描 然后得到二维码内容 显示在二维码信息那里(二维码本身就是JSON格式) 然后点查询 把二维码内容发送出去 得到返回值 显示在返回信息那里 2个方法的返回值都是通过handler发送然后再获取msg 再setText 然后我如果显示了二维码信息 再点查询的话就会退回上一级 报空指针 如果我单扫描二维码 不显示出来(还是获得了二维码信息 仅不setText) 那我点查询就可以显示返回值 请问要怎么解决 让我显示了二维码信息后还是可以显示返回值 新手小白。。。

    String orderresult;
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            orderresult=msg.getData().getString("msg");
            parseJSONWithGSONForQR(orderresult);
            responseinfo.setText(msg.getData().getString("JSON"));
        }
    };


    public void parseJSONWithGSONForQR(String jsonData) {
        String showorder;
        Gson gson = new Gson();
        List<TransPack> transPackList = gson.fromJson(jsonData, new TypeToken<List<TransPack>>() {
        }.getType());
        for (TransPack transPack : transPackList) {
            showorder="订单号:"+transPack.getId().toString()+"\n"+"意向金:"+transPack.getIntention().toString()+"\n"+"进度款:"+transPack.getProgress().toString()+"\n"+"设计费:"+transPack.getDesign().toString();
            orderinfo.setText(showorder);
        }
    }

    public void queryOrder(){
        new Thread(){
            public void run(){
                postJson();
            }
        }.start();
    }

    public String responseJSON;
    public static final String TAG="ScanQR";
    public static final MediaType JSON=MediaType.parse("application/json; charset=utf-8");
    public void postJson(){
        OkHttpClient okHttpClient=new OkHttpClient();
        RequestBody requestBody=RequestBody.create(JSON,orderresult);
        Request request=new Request.Builder()
                .url("http://api.jisuapi.com/iqa/query")
                .post(requestBody)
                .build();
        try{
            Response response=okHttpClient.newCall(request).execute();
            if(response.isSuccessful()){
                Log.i(TAG,response.body().string());
                responseJSON=response.toString();
                Message msg=new Message();
                msg.getData().putString("JSON",responseJSON);
                handler.sendMessage(msg);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

空指针的化msg.getData().getString("JSON")这段先判空,再setText;注意对象类型使用时都要注意空指针

调试下
super.handleMessage(msg);
orderresult=msg.getData().getString("msg");
parseJSONWithGSONForQR(orderresult);
responseinfo.setText(msg.getData().getString("JSON"));
这几行,看看哪里报错,和你setText调用了几次没关系,应该是json解析和QR获取的代码,有问题,单步调试可以知道具体出错的行。

orderresult=msg.getData().getString("msg");

你的sendMessage的msg里没有设置"msg"啊

msg = handler.obtainMessage(); 不要new

try{
Response response=okHttpClient.newCall(request).execute();
if(response.isSuccessful()){
Log.i(TAG,response.body().string());
responseJSON=response.toString();

** Message msg=new Message();**

            msg.getData().putString("JSON",responseJSON);
            handler.sendMessage(msg);
        }
    }catch (IOException e){
        e.printStackTrace();
    }

            这里不能是new出来的