2013-10-03 18 views
1

這是我AsyncTask類:DefaultHttpClient的AsyncTask類超時異常

 
public class JSONParser extends AsyncTask { 

    public interface MyCallbackInterface { 
     public void onRequestComplete(JSONObject result); 
    } 

    private MyCallbackInterface mCallback; 

    public JSONParser(MyCallbackInterface callback) { 
     mCallback = callback; 

     Context context = (Context) callback; 
    } 

    public JSONObject getJSONFromUrl(String url) { 

     // Making HTTP request 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpPost = new HttpGet(url); 
     HttpResponse getResponse = null; 

     final HttpParams httpParameters = httpClient.getParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParameters, 10 * 10000); 
     HttpConnectionParams.setSoTimeout  (httpParameters, 10 * 10000); 

     try { 
      getResponse = httpClient.execute(httpPost); 
     } catch (ClientProtocolException e2) { 
      e2.printStackTrace(); 
     } catch (IOException e2) { 
      e2.printStackTrace(); 
     } 

     final int statusCode = getResponse.getStatusLine().getStatusCode(); 

     if (statusCode != HttpStatus.SC_OK) { 
      Log.w(getClass().getSimpleName(), 
       "Error " + statusCode + " for URL " + url); 
      return null; 
     } 

     HttpEntity getResponseEntity = getResponse.getEntity(); 

     String json = null; 
     try { 
      json = EntityUtils.toString(getResponseEntity); 
     } catch (ParseException e1) { 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

     JSONObject jObj = null; 
     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 
    } 

    @Override 
    protected JSONObject doInBackground(String... params) { 
     String url = params[0];    
     return getJSONFromUrl(url); 
    } 

    @Override 
    protected void onPostExecute(JSONObject result) { 

     mCallback.onRequestComplete(result); 

    } 

} 

我得到了UI的JSON答案(在RegisterActivity extends Activity implements MyCallbackInterface類)有:

 
public class RegisterActivity extends Activity implements MyCallbackInterface{ 
... 
    @Override 
    public void onRequestComplete(JSONObject json) { 
//hire parse and display json 
...

我打電話JSONParser從相同的用戶界面(類RegisterActivity extends Activity implements MyCallbackInterface

JSONParser mJSONParser1 = new JSONParser(context111); 
mJSONParser1.execute(SERVER_URL+"?method=registration&user="+user+"&pass="+pass+"&regId="+regId); 

exc eptions:

 
10-03 15:58:02.303: W/System.err(22414): java.net.SocketException: Connection timed out 
10-03 15:58:02.350: W/System.err(22414): at org.apache.harmony.luni.platform.OSNetworkSystem.read(Native Method) 
10-03 15:58:02.366: W/System.err(22414): at dalvik.system.BlockGuard$WrappedNetworkSystem.read(BlockGuard.java:273) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.harmony.luni.net.PlainSocketImpl.read(PlainSocketImpl.java:458) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.harmony.luni.net.SocketInputStream.read(SocketInputStream.java:85) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:179) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
10-03 15:58:02.366: W/System.err(22414): at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
10-03 15:58:02.366: W/System.err(22414): at com.androidhive.pushnotifications.JSONParser.getJSONFromUrl(JSONParser.java:72) 
10-03 15:58:02.366: W/System.err(22414): at com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:121) 
10-03 15:58:02.366: W/System.err(22414): at com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:1) 
10-03 15:58:02.366: W/System.err(22414): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
10-03 15:58:02.366: W/System.err(22414): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
10-03 15:58:02.366: W/System.err(22414): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
10-03 15:58:02.366: W/System.err(22414): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
10-03 15:58:02.374: W/System.err(22414): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
10-03 15:58:02.374: W/System.err(22414): at java.lang.Thread.run(Thread.java:1019) 
10-03 15:58:02.374: W/dalvikvm(22414): threadid=9: thread exiting with uncaught exception (group=0x40018560) 
10-03 15:58:02.374: E/AndroidRuntime(22414): FATAL EXCEPTION: AsyncTask #1 
10-03 15:58:02.374: E/AndroidRuntime(22414): java.lang.RuntimeException: An error occured while executing doInBackground() 
10-03 15:58:02.374: E/AndroidRuntime(22414): at android.os.AsyncTask$3.done(AsyncTask.java:200) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.FutureTask.setException(FutureTask.java:125) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.lang.Thread.run(Thread.java:1019) 
10-03 15:58:02.374: E/AndroidRuntime(22414): Caused by: java.lang.NullPointerException 
10-03 15:58:02.374: E/AndroidRuntime(22414): at com.androidhive.pushnotifications.JSONParser.getJSONFromUrl(JSONParser.java:81) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:121) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at com.androidhive.pushnotifications.JSONParser.doInBackground(JSONParser.java:1) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at android.os.AsyncTask$2.call(AsyncTask.java:185) 
10-03 15:58:02.374: E/AndroidRuntime(22414): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) 
10-03 15:58:02.374: E/AndroidRuntime(22414): ... 4 more 

我有互聯網接入服務器。 它的工作在三星S2(Android 4.1.2),但摩托羅拉(與Android 2.3.3)沒有。

任何想法都會受到歡迎。

我認爲這個問題和asynctask一樣...但是......沒什麼更多的幫助。

PP php服務器返回寫請求的答案(PHP日誌),但應用程序不能得到它。

+0

您在'81'行的'getJasonFromUrl'方法中得到'NullPointerException'找出爲什麼是null – tyczj

+0

我不知道爲什麼 – user1309635

+0

我不是它的代碼,我甚至不知道第81行是 – tyczj

回答

0

JSONParser mJSONParser1 = new JSONParser(context111); mJSONParser1.execute(SERVER_URL+"?method=registration&user="+user+"&pass="+pass+"®Id="+regId)拼寫錯誤或直接剪切/粘貼? 「Id =」位旁邊有一些不尋常的字符。

而且你有代碼造成的空行,那麼,爲什麼空(如tyczj指出)

+0

JSONParser mJSONParser1 = new JSONParser(context111); \t \t \t \t \t mJSONParser1.execute(SERVER_URL +「?method = registration&user =」+ user +「&pass =」+ pass +「&regId =」+ regId); - >這是真正的代碼,我不知道爲什麼有不尋常的字符...錯誤的粘貼,我認爲 – user1309635

+0

而且你確實有導致空 - >我怎麼能做到這一點,我在哪裏新的Java – user1309635

0

以上的答案是正確的,但切切實實的,你應該使用POST而不是GET安全

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpPost httpPost = new HttpPost("SERVER_URL"); 
httpPost.setEntity(new UrlEncodedFormEntity(params)); 

,並設置PARAMS弄成這樣

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
params.add(new BasicNameValuePair("email", email)); 

有很好的arguement爲GET VS POST here