2016-10-21 13 views
6

Здесь требуется столько времени, чтобы получить данные от json. Когда удален и снова установлен он будет получать json в течение 1 мин, и когда я снова нажмите кнопку для json это занимает так много времени, и до сих пор данные не получают в listviewjava.net.SocketTimeoutException в okhttp

Вот мой код исключения

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) 

здесь является JSON-код в 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(); 
    } 
} 

Другие коды:

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; 
} 

ответ

15

IOExceptiojava.net.SocketTimeoutException происходит на следующее состояние.

  1. Сервер работает медленно, а время ожидания по умолчанию - меньше. поэтому просто введите значение тайм-аута в соответствии с вами.
  2. Сервер работает нормально, но значение тайм-аута за меньшее время. поэтому измените значение тайм-аута. как ниже фрагмент кода.

OkHttpClient client = new OkHttpClient();

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

Если вы используете okhttp3, тогда вы должны сделать это с помощью строителя.

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

Я отредактировал, но здесь я не получаю client.setConnectTimeout (30, TimeUnit.SECONDS); client.setReadTimeout (30, TimeUnit.SECONDS); client.setWriteTimeout (30, TimeUnit.SECONDS); – Abhi

+4

@Abhi Если вы используете okhttp3, тогда вы должны сделать это, используя строитель. OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout (30, TimeUnit.SECONDS); builder.readTimeout (30, TimeUnit.SECONDS); builder.writeTimeout (30, TimeUnit.SECONDS); client = builder.build(); – Cognoscis

+0

@Cognoscis Я думаю, вы должны отправить ответ с этой информацией/кодом. –

-1

В моем случае я запросил неправильный URL (сервер был прав, но часть URL-адреса была неправильной).

 Смежные вопросы

  • Нет связанных вопросов^_^