使用JSON的Android HTTP Conection不断崩溃应用程序



嘿伙计们,当我尝试从服务器获取数据并将其读取为 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 */);

最新更新