空的時候會過來在能力范圍內幫同學解答問題,回復格式:
1.問題簡述
2.關鍵代碼+日志
uj5u.com熱心網友回復:
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)
uj5u.com熱心網友回復:
你看一下你的data列印,serverinfo可能缺少轉義字符無法被識別,試試uj5u.com熱心網友回復:
你的serverinfo就是string,有引號沒看到嗎{"serverinfo":"{...}"},先getString再將string轉成jsonobj
uj5u.com熱心網友回復:
淦,眼瞎了,沒看到,我說怎么回事。
uj5u.com熱心網友回復:
請問為什么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="https://bbs.csdn.net/topics/原始的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;
}
}

uj5u.com熱心網友回復:
請問為什么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="https://bbs.csdn.net/topics/原始的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;
}
}
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
uj5u.com熱心網友回復:
請問為什么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="https://bbs.csdn.net/topics/原始的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;
}
}
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
嗯,謝謝,用了別的辦法解決了
uj5u.com熱心網友回復:
請問為什么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="https://bbs.csdn.net/topics/原始的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;
}
}
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
嗯,謝謝,用了別的辦法解決了
不客氣,哈哈
uj5u.com熱心網友回復:
學習學習,謝謝分享。。。。。。。。。。。uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
是的,這個涉及到多執行緒的問題,需要用hanler來處理,這種寫法容易出現未知問題,需要注意,很多時候會忽視這個問題,曾經我也遇到多執行緒同步的問題,我相當于又犯一次,沒看到問題根本,受教了
uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
是的,這個涉及到多執行緒的問題,需要用hanler來處理,這種寫法容易出現未知問題,需要注意,很多時候會忽視這個問題,曾經我也遇到多執行緒同步的問題,我相當于又犯一次,沒看到問題根本,受教了
我又來了,我發現我這個問題沒有根本的解決,現在還是出現上面這種狀況,該如何處理呢?
uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
是的,這個涉及到多執行緒的問題,需要用hanler來處理,這種寫法容易出現未知問題,需要注意,很多時候會忽視這個問題,曾經我也遇到多執行緒同步的問題,我相當于又犯一次,沒看到問題根本,受教了
我又來了,我發現我這個問題沒有根本的解決,現在還是出現上面這種狀況,該如何處理呢?
如上所說,這里涉及到多執行緒之間通信問題,不然會導致的資料不同步,你修改成handler訊息來處理應該問題不大
uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
是的,這個涉及到多執行緒的問題,需要用hanler來處理,這種寫法容易出現未知問題,需要注意,很多時候會忽視這個問題,曾經我也遇到多執行緒同步的問題,我相當于又犯一次,沒看到問題根本,受教了
我又來了,我發現我這個問題沒有根本的解決,現在還是出現上面這種狀況,該如何處理呢?
如上所說,這里涉及到多執行緒之間通信問題,不然會導致的資料不同步,你修改成handler訊息來處理應該問題不大
已經解決了,利用handler 對msg的判斷搞定了這個問題。非常感謝各位大佬不厭其煩的回答我的問題。我還會繼續問下去的;
uj5u.com熱心網友回復:
你仔細看一下你的Post類里你又定義了同一個名字的data變數,而后面那個data是區域變數,你說你最后回傳的是那個,嘿嘿
糾正一下,這是多執行緒問題,中間的代碼是開了一個新的執行緒,return是在當前執行緒會直接回傳回去此時你的新執行緒還沒有來得及修改data的值。
是的,這個涉及到多執行緒的問題,需要用hanler來處理,這種寫法容易出現未知問題,需要注意,很多時候會忽視這個問題,曾經我也遇到多執行緒同步的問題,我相當于又犯一次,沒看到問題根本,受教了
我又來了,我發現我這個問題沒有根本的解決,現在還是出現上面這種狀況,該如何處理呢?
如上所說,這里涉及到多執行緒之間通信問題,不然會導致的資料不同步,你修改成handler訊息來處理應該問題不大
已經解決了,利用handler 對msg的判斷搞定了這個問題。非常感謝各位大佬不厭其煩的回答我的問題。我還會繼續問下去的;
不客氣,大家交流學習,共同進步,加油!
uj5u.com熱心網友回復:
android應用層學習路線博客持續更新,歡迎各位大佬試讀https://blog.csdn.net/angelsmiling/article/details/99679494
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/95607.html
標籤:Android
