空的时候会过来在能力范围内帮同学解答问题,回复格式:
1.问题简述
2.关键代码+日志

解决方案 »

  1.   

    1.JSONObject jsonObj = new JSONObject(data).getJSONObject("serverinfo");
    这一行
    为什么报错
     String data = response.body().string();
                                Log.d("测试", "onResponse: " + response + "-----" + data);
                                try {
                                    JSONObject jsonObj = new JSONObject(data).getJSONObject("serverinfo");
                                    int id = jsonObj.getInt("CarSpeed");                                gson_json.setText("速度"+id);
                                } catch (JSONException e) {
                                    System.out.println("Json parse error");
                                    e.printStackTrace();
                                }
    D/测试: onResponse: Response{protocol=http/1.1, code=200, message=, url=http://192.168.31.120:8080/transportservice/type/jason/action/GetCarSpeed.do}-----{"serverinfo":"{\"CarSpeed\":12}\n"}
    I/System.out: Json parse error
    W/System.err: org.json.JSONException: Value {"CarSpeed":12}
         at serverinfo of type java.lang.String cannot be converted to JSONObject
    W/System.err:     at org.json.JSON.typeMismatch(JSON.java:100)
            at org.json.JSONObject.getJSONObject(JSONObject.java:613)
            at com.example.tomlin.post_get.OkHttpClientActivity$2$1.onResponse(OkHttpClientActivity.java:167)
            at okhttp3.RealCall$AsyncCall.execute(RealCall.java:153)
            at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
            at java.lang.Thread.run(Thread.java:818)
      

  2.   

    你看一下你的data打印,serverinfo可能缺少转义字符无法被识别,试试
      

  3.   

    你的serverinfo就是string,有引号没看到吗{"serverinfo":"{...}"},先getString再将string转成jsonobj
      

  4.   

    你的serverinfo就是string,有引号没看到吗{"serverinfo":"{...}"},先getString再将string转成jsonobj淦,眼瞎了,没看到,我说怎么回事。
      

  5.   

    请问为什么return过来的值是一开始的值
    package com.lenovo.smarttraffic.post;
    import android.util.Log;
    import java.io.IOException;
    import okhttp3.MediaType;
    import okhttp3.OkHttpClient;
    import okhttp3.Request;
    import okhttp3.RequestBody;
    import okhttp3.Response;public class Post {
        private String data="原始的data";
        public String SendPost(String url, String sendJson){
            new Thread(){
                @Override
                public void run() {
                    String data;
                    super.run();
                    OkHttpClient client=new OkHttpClient();
                    RequestBody body = RequestBody.create(MediaType.parse("application/json;charset=utf-8"),sendJson);
                    Request request = new Request.Builder().url(url).post(body).build();
                    Response response = null;
                    try {
                        response = client.newCall(request).execute();
                        data = response.body().string();
                        Log.d("获取的data值",data);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }            }
            }.start();        return data;
        }}
      

  6.   

    你仔细看一下你的Post类里你又定义了同一个名字的data变量,而后面那个data是局部变量,你说你最后返回的是那个,嘿嘿
      

  7.   

    你仔细看一下你的Post类里你又定义了同一个名字的data变量,而后面那个data是局部变量,你说你最后返回的是那个,嘿嘿
    嗯,谢谢,用了别的办法解决了
      

  8.   

    你仔细看一下你的Post类里你又定义了同一个名字的data变量,而后面那个data是局部变量,你说你最后返回的是那个,嘿嘿
    嗯,谢谢,用了别的办法解决了不客气,哈哈
      

  9.   

    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。
      

  10.   

    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。是的,这个涉及到多线程的问题,需要用hanler来处理,这种写法容易出现未知问题,需要注意,很多时候会忽视这个问题,曾经我也遇到多线程同步的问题,我相当于又犯一次,没看到问题根本,受教了
      

  11.   

    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。是的,这个涉及到多线程的问题,需要用hanler来处理,这种写法容易出现未知问题,需要注意,很多时候会忽视这个问题,曾经我也遇到多线程同步的问题,我相当于又犯一次,没看到问题根本,受教了
    我又来了,我发现我这个问题没有根本的解决,现在还是出现上面这种状况,该如何处理呢?
      

  12.   

    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。是的,这个涉及到多线程的问题,需要用hanler来处理,这种写法容易出现未知问题,需要注意,很多时候会忽视这个问题,曾经我也遇到多线程同步的问题,我相当于又犯一次,没看到问题根本,受教了
    我又来了,我发现我这个问题没有根本的解决,现在还是出现上面这种状况,该如何处理呢?如上所说,这里涉及到多线程之间通信问题,不然会导致的数据不同步,你修改成handler消息来处理应该问题不大
      

  13.   


    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。是的,这个涉及到多线程的问题,需要用hanler来处理,这种写法容易出现未知问题,需要注意,很多时候会忽视这个问题,曾经我也遇到多线程同步的问题,我相当于又犯一次,没看到问题根本,受教了
    我又来了,我发现我这个问题没有根本的解决,现在还是出现上面这种状况,该如何处理呢?如上所说,这里涉及到多线程之间通信问题,不然会导致的数据不同步,你修改成handler消息来处理应该问题不大
    已经解决了,利用handler 对msg的判断搞定了这个问题。非常感谢各位大佬不厌其烦的回答我的问题。我还会继续问下去的;
      

  14.   

    纠正一下,这是多线程问题,中间的代码是开了一个新的线程,return是在当前线程会直接返回回去此时你的新线程还没有来得及修改data的值。是的,这个涉及到多线程的问题,需要用hanler来处理,这种写法容易出现未知问题,需要注意,很多时候会忽视这个问题,曾经我也遇到多线程同步的问题,我相当于又犯一次,没看到问题根本,受教了
    我又来了,我发现我这个问题没有根本的解决,现在还是出现上面这种状况,该如何处理呢?如上所说,这里涉及到多线程之间通信问题,不然会导致的数据不同步,你修改成handler消息来处理应该问题不大
    已经解决了,利用handler 对msg的判断搞定了这个问题。非常感谢各位大佬不厌其烦的回答我的问题。我还会继续问下去的;
    不客气,大家交流学习,共同进步,加油!
      

  15.   

    android应用层学习路线博客持续更新,欢迎各位大佬试读
    https://blog.csdn.net/angelsmiling/article/details/99679494