Подтвердить что ты не робот

OkHttp в android для создания сетевых запросов

Что я пытаюсь сделать:

Я пытаюсь изучить использование Okhttp для создания сетевых вызовов в android


Что я сделал:

  • Я прочитал их документацию здесь
  • Я загрузил и добавил JAR в проект
  • Я использую свой пример кода из здесь

MyCode::

MainActivity.java

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.internal.http.Request;
import com.squareup.okhttp.internal.http.Response;
    public class MainActivity extends Activity {

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

             Request request = new Request.Builder()
                .url("https://raw.github.com/square/okhttp/master/README.md")
                .build();

            Response response = client.execute(request);

            Log.d("ANSWER", response.body().string());

        }

    }

Ошибка, с которой я столкнулся:

В строке Response response = client.execute(request); Я получаю сообщение об ошибке:

клиент не может разрешить переменную

Как это решить!


{Обновление}

public class MainActivity extends Activity {

    OkHttpClient client = new OkHttpClient();


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

         Request request = new Request.Builder()
            .url("https://raw.github.com/square/okhttp/master/README.md")
            .build();

        Response response = client.execute(request);

        Log.d("ANSWER", response.body().string());

    }

}

Теперь я столкнулся с ошибкой:

в строке Response response = client.execute(request); как The method execute(Request) is undefined for the type OkHttpClient

4b9b3361

Ответ 1

Выполнение (запрос) метода undefined для типа OkHttpClient

Вы получаете это исключение, потому что такого метода нет, т.е. execute(Request) для OkHttpClient. Скорее он вызывается в Call объекте, который получается с помощью объекта OkHttpClient следующим образом:

  Call call = client.newCall(request);
  Response response = call.execute();

Я думаю, вы должны использовать

Response response = client.newCall(request).execute();

вместо Response response = client.execute(request);

OkHttp docs

Блог OkHttp

Ответ 2

Я думаю, вы должны использовать новый 2.0 RC okHttp.

Чтобы сделать запрос POST, лучше всего:

String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
        .url(url)
        .post(body)
        .build();
    Response response = client.newCall(request).execute();
    return response.body().string();
}

Ответ 3

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new AsyncTask<String, Integer, String> (){

        @Override
        protected String doInBackground(String... params) {
            // TODO Auto-generated method stub
            try {
                client = new OkHttpClient();
                s = post("https://raw.github.com/square/okhttp/master/README.md","");
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            return null;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            Log.e("ANSWER", "" + s);

        }
    }.execute();

}

Ответ 4

@Override
protected String doInBackground(String... ulr) {
    Response response = null;
    OkHttpClient client = new OkHttpClient();
    Request request = new Request.Builder()
    .url(ulr[0])
    .build();

    try {
        response = client.newCall(request).execute();
         return response.body().string();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;        
}

используйте вот так!

Ответ 5

вам не хватает этой строки

OkHttpClient client = new OkHttpClient();

Ответ 6

Попробуйте добавить разрешения в вашем файле манифеста?

<uses-permission android:name="android.permission.INTERNET" />

Ответ 7

Вам нужно объявить клиентскую переменную следующим образом:

OkHttpClient client = new OkHttpClient();

Также вы должны использовать свой запрос, используя какой-то поток или AsyncTask!

Вы можете прочитать что-то еще об AsyncTask на Android по этой ссылке: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/

Ответ 8

Вам нужно только заменить: Это:

Response response = client.execute(request);

По:

Response response = client.newCall(request).execute();