嘿伙计们,当我尝试从服务器获取数据并将其读取为 JSON 时,我的应用程序中不断收到此错误,但我被困住了,因为它不会一直发生 听到的是代码
private class statusUpdateTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... urls) {
if(testServe("http://www.gogodis.comxa.com/getData.php")) {
HttpURLConnection conn = null;
BufferedReader reader = null;
try {
URL url = new URL(urls[0]);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
InputStream is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is));
StringBuffer sb = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
sb.append(line);
}
return sb.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}else{
retry(0);
}
return null;
}
@Override
protected void onPostExecute(String result) {
if(isJSONValid(result)) {
try {
JSONObject results = new JSONObject(result);
JSONArray jr = results.getJSONArray("results");
JSONObject set = jr.getJSONObject(0);
JSONObject info = set.getJSONArray("info").getJSONObject(0);
if (info.getString("state").equals("ok")) {
if (info.getInt("inbox") == 1) {
inbox.setImageResource(R.drawable.camr);
} else inbox.setImageResource(R.drawable.cam);
if (info.getInt("chat") == 1) {
chat.setImageResource(R.drawable.msgr);
} else chat.setImageResource(R.drawable.msg);
if(info.getInt("match") == 1){
new newMatchUpdateTask().execute("http://www.gogodis.comxa.com/getData.php?type=new_match&&user=" + my_user_id);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
}else{
retry(0);
}
}
}
听的是日志广播
05-30 15:05:11.205 5071-5394/com.reallyChat W/System.err: java.net.SocketTimeoutException
05-30 15:05:11.676 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:491)
05-30 15:05:11.676 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.InputStream.read(InputStream.java:163)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.io.Streams.readAsciiLine(Streams.java:201)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:573)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:821)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:283)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at com.really_chat.results$statusUpdateTask.doInBackground(results.java:968)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at com.really_chat.results$statusUpdateTask.doInBackground(results.java:953)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at android.os.AsyncTask$2.call(AsyncTask.java:287)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.FutureTask.run(FutureTask.java:234)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
05-30 15:05:11.686 5071-5394/com.reallyChat W/System.err: at java.lang.Thread.run(Thread.java:856)
05-30 15:05:11.696 5071-5071/com.reallyChat D/AndroidRuntime: Shutting down VM
05-30 15:05:11.706 5071-5071/com.reallyChat W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x411cd930)
05-30 15:05:11.726 5071-5071/com.reallyChat E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
at org.json.JSONTokener.nextValue(JSONTokener.java:94)
at org.json.JSONObject.<init>(JSONObject.java:154)
at org.json.JSONObject.<init>(JSONObject.java:171)
at com.really_chat.results.isJSONValid(results.java:1158)
at com.really_chat.results$statusUpdateTask.onPostExecute(results.java:989)
at com.really_chat.results$statusUpdateTask.onPostExecute(results.java:953)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5283)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
iv'e 甚至试图输入确认其 JSON 的代码,但仍然没有运气
public boolean isJSONValid(String test) {
try{
new JSONObject(test);
}catch(JSONException ex){
try{
new JSONArray(test);
}catch(JSONException ex1){
return false;
}
}
return true;
}
private boolean testServe(String url) {
try{
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(15000);
connection.connect();
return true;
} catch (Exception e) {
// Handle your exceptions
return false;
}
}
尝试像这样改变
conn.setReadTimeout(0 /* milliseconds */);//Infinite timeout
conn.setConnectTimeout(25000 /* milliseconds */);