tankgoing
tankgoing
2017-12-31 07:13

android安卓handler报空指针错

20
  • handler
  • android
  • json
  • 空指针异常

有2个按钮 一个是扫描一个查询 按扫描可以扫描二维码(二维码包含json信息)然后解析后显示在二维码信息那里 然后点查询 把二维码所含的json信息发送出去 得到返回值显示在返回信息那里 如果我只做查询 解析结果可以正常显示 如果我再点查询就会报一个空指针 说我解析那一步错 如果我不做解析 那发送也正常 有没有大神帮我看看为什么
错误信息
Process: com.abc.smartpos.cash, PID: 25086
java.lang.NullPointerException: Attempt to invoke interface method 'java.util.Iterator java.util.List.iterator()' on a null object reference
at com.abc.smartpos.cash.ScanQR.parseJSONWithGSONForQR(ScanQR.java:138)
at com.abc.smartpos.cash.ScanQR$4.handleMessage(ScanQR.java:127)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:902)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:697)

我的代码

    String orderresult;
    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            orderresult=msg.getData().getString("msg");
                        //单独执行parseJSONWithGSONForQR()正常显示,继续执行查询操作这里报空指针
            parseJSONWithGSONForQR(orderresult);
            responseinfo.setText(msg.getData().getString("JSON"));
        }
    };

//解析扫描得到的JSON数据后设置textview
    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();
    }
//发送JSON并得到返回值,用handler发送
    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();
        }
    }

图片说明

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐

换一换