2016-10-21 1 views
6

Ici, il faut tellement de temps pour obtenir des données de json. Lorsque supprimé et encore une fois installé, il se json à 1 min et quand je clique nouveau sur le bouton pour json il faut beaucoup de temps et encore des données ne reçoit pas dans listviewjava.net.SocketTimeoutException dans okhttp

Voici mon code d'exception

E/JSONDemo: IOExceptiojava.net.SocketTimeoutException 
    at java.net.PlainSocketImpl.read(PlainSocketImpl.java:493) 
    at java.net.PlainSocketImpl.-wrap0(PlainSocketImpl.java) 
    at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:242) 
    at okio.Okio$2.read(Okio.java:140) 
    at okio.AsyncTimeout$2.read(AsyncTimeout.java:238) 
    at okio.RealBufferedSource.indexOf(RealBufferedSource.java:325) 
    at okio.RealBufferedSource.indexOf(RealBufferedSource.java:314) 
    at okio.RealBufferedSource.readUtf8LineStrict(RealBufferedSource.java:210) 
    at okhttp3.internal.http.Http1xStream.readResponse(Http1xStream.java:184) 
    at okhttp3.internal.http.Http1xStream.readResponseHeaders(Http1xStream.java:125) 
    at okhttp3.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:775) 
    at okhttp3.internal.http.HttpEngine.access$200(HttpEngine.java:86) 
    at okhttp3.internal.http.HttpEngine$NetworkInterceptorChain.proceed(HttpEngine.java:760) 
    at okhttp3.internal.http.HttpEngine.readResponse(HttpEngine.java:613) 
    at okhttp3.RealCall.getResponse(RealCall.java:244) 
    at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:201) 
    at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:163) 
    at okhttp3.RealCall.access$100(RealCall.java:30) 
    at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127) 
    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) 

ici est un code JSON dans le fichier java:

progress = ProgressDialog.show(MainActivity.this, "dialog title", "dialog message", true); 
Toast.makeText(MainActivity.this, "ok", Toast.LENGTH_LONG).show(); 

    if (isNetworkAvailable()) { 

     String url = "ConstantValue.URL"; 
     RequestBody formBody = new FormBody.Builder() 
       .add(employeeId, value) 
       .build(); 

     try { 
      post(url, formBody, new Callback() { 

       @Override 
       public void onFailure(Call call, IOException e) { 
        Log.e("JSONDemo", "IOException", e); 
       } 

       @Override 
       public void onResponse(final Call call, final Response response) throws IOException { 
        String JSON = response.body().string(); 
        Log.e("res", " " + JSON); 
        try { 
         JSONObject jsonObj = new JSONObject(JSON); 
         JSONArray resultarr = jsonObj.getJSONArray("result"); 
         final JSONArray resultarr1 = jsonObj.getJSONArray("result1"); 

         if (resultarr1.length() == 0) { 
          showAlertDialog("API", "Data Unavailable"); 
         } else { 

          for (int i = 0; i < resultarr1.length(); i++) { 

           Employee emp = new Employee(); 
           JSONObject result1obj = resultarr1.getJSONObject(i); 
           String result1Id = result1obj.getString("ID"); 
           String result1Name = result1obj.getString("NAME"); 
           String result1Value = result1obj.getString("VALUE"); 
           Log.e("result", " " + result1Name); 
           Log.e("result", " " + result1Value); 
           Log.e("result", " " + result1Id); 
           emp.setValue(result1Value); 
           emp.setName(result1Name); 
           emp.setId(result1Id); 

           arr.add(emp); 

          } 
         } 

         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 

           // you can access all the UI componenet 
           if (progress.isShowing()) 
            progress.dismiss(); 
           cu.notifyDataSetChanged(); 
          } 
         }); 
        } catch (Exception e) { 
         Log.e("JSONDemo", "onResponse", e); 
         showAlertDialog("API","Something went wrong"); 
        } 

       } 
      }); 

     } catch (Exception e) { 
      Log.e("JSONDemo", "Post Exception", e); 
     } 

    } else { 
     Toast.makeText(MainActivity.this, "Internet not available", Toast.LENGTH_LONG).show(); 
    } 
} 

Autres codes:

private final OkHttpClient client = new OkHttpClient(); 


Call post(String url, RequestBody formBody, Callback callback) throws IOException { 

    Request request = new Request.Builder() 
      .url(url) 
      .post(formBody) 
      .build(); 

    client.setConnectTimeout(30, TimeUnit.SECONDS); 
    client.setReadTimeout(30, TimeUnit.SECONDS); 
    client.setWriteTimeout(30, TimeUnit.SECONDS); 

    Call call = client.newCall(request); 
    call.enqueue(callback); 
    return call; 
} 

Répondre

15

IOExceptiojava.net.SocketTimeoutException se produit à la condition suivante.

  1. Le serveur est lent et le délai par défaut est inférieur. Il suffit donc de mettre la valeur du délai d'expiration selon vous.
  2. Le serveur fonctionne correctement, mais le délai d'attente est inférieur. alors changez la valeur du timeout. comme l'extrait de code ci-dessous.

OkHttpClient client = nouveau OkHttpClient();

client.setConnectTimeout(30, TimeUnit.SECONDS); 
client.setReadTimeout(30, TimeUnit.SECONDS); 
client.setWriteTimeout(30, TimeUnit.SECONDS); 

Si vous utilisez okhttp3, vous devez le faire en utilisant le constructeur.

OkHttpClient.Builder builder = new OkHttpClient.Builder(); 
builder.connectTimeout(30, TimeUnit.SECONDS); 
builder.readTimeout(30, TimeUnit.SECONDS); 
builder.writeTimeout(30, TimeUnit.SECONDS); 
client = builder.build(); 
+0

j'avais édité mais ici je ne reçois pas client.setConnectTimeout (30, TimeUnit.SECONDS); client.setReadTimeout (30, TimeUnit.SECONDS); client.setWriteTimeout (30, TimeUnit.SECONDS); – Abhi

+4

@Abhi Si vous utilisez okhttp3 alors vous devez le faire en utilisant le constructeur. OkHttpClient.Builder builder = nouveau OkHttpClient.Builder(); builder.connectTimeout (30, TimeUnit.SECONDS); builder.readTimeout (30, TimeUnit.SECONDS); builder.writeTimeout (30, TimeUnit.SECONDS); client = constructeur.build(); – Cognoscis

+0

@Cognoscis Je pense que vous devriez soumettre une réponse avec cette info/code. –

-1

Dans mon cas, j'ai demandé une URL incorrecte (le serveur avait raison, mais une partie de l'URL était erronée).