有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();
}
}