2015-11-08 2 views
1

В настоящее время у меня возникают ошибки при выполнении моего запроса на отправку. Я попытался сделать то, что другие рекомендовали на других ссылках на stackoverflow, но это не сработало для меня. Ниже мой код:Android OKHTTP

public void postGames(View v) { 
    //Sets the data input by user into variables 
    TextView gameName = (TextView) findViewById(R.id.gameName); 
    TextView companyName = (TextView) findViewById(R.id.companyName); 
    TextView consoleName = (TextView) findViewById(R.id.consoleName); 
    final TextView resultMessage = (TextView) findViewById(R.id.postResult); 

    //Set up the url 
    String gamesUrl = "sampleurl..."; 

    //Creates the HTTP client and puts the url info in it 
    OkHttpClient client = new OkHttpClient(); 
    RequestBody formBody = new FormEncodingBuilder() 
      .add("name", "hello") 
      .add("company", "world") 
      .add("console", "Blagh") 
      .build(); 
    Request request = new Request.Builder() 
      .url(gamesUrl) 
      .post(formBody) 
      .build(); 

    //First checks if the network is available 
    if (isNetworkAvailable()) { 
     //Executes the post request 
     try { 
      Response response = client.newCall(request).execute(); 
      if(response.isSuccessful()){ 
       resultMessage.setText("Post successful..."); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
      resultMessage.setText("Error in executing post request..."); 
     } 

    } else { 
     Toast.makeText(this, getString(R.string.network_unavailable_message), 
       Toast.LENGTH_LONG).show(); 
    } 
} 

Это дает ошибку на "ответ Response = client.newCall (запрос) .Execute();" линия. Есть ли что-то, что я делаю неправильно здесь?

+0

Вы должны опубликовать stacktrace - или, по крайней мере, указать, что такое ошибка ... – Jim

+0

вы не можете выполнять обе сети и устанавливать тексты в той же теме. Ваша ошибка, вероятно, представляет собой тривиальную сеть при ошибке основного потока. \ – njzk2

ответ

1

Попробуйте реализовать ответ следующим образом:

final Call call = okHttpClient.newCall(request); 
     call.enqueue(new Callback() { 
         @Override 
         public void onFailure(Request request, final I 
           } 
          }); 
         } 
         @Override 
         public void onResponse(final Response response) 
           throws IOException { 
          } 
         } 
        } 
0

Поскольку вы используете синхронный способ OkHttp, поэтому в Android вы должны использовать его внутри AsyncTask. Возможно, ваше приложение может получить NetworkOnMainThreadException.

Если вы не хотите AsyncTask, вы должны реализовать OkHttp с его асинхронным способом.

ИМХИ, вы можете найти более подробную информацию на

https://github.com/square/okhttp/wiki/Recipes

и есть хороший ответ на следующий вопросе доступен на SO:

Using OKHttp, what is the difference between synchronous request in AsyncTask and OKhttp Asynchronous request?

Надеется, что это помогает !

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