web-dev-qa-db-ja.com

OkHttp in Androidネットワーク要求を作成するため

私がやろうとしていること ::

Okhttp の使用方法を学習しようとしています


私がしたこと ::

  • 私は彼らのドキュメントを読みました here
  • プロジェクトにJARをダウンロードして追加しました
  • here のサンプルコードを使用しています

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); as The method execute(Request) is undefined for the type OkHttpClient

16
Devrath

メソッドexecute(Request)は、タイプOkHttpClientに対して未定義です

OkHttpClientにそのようなメソッド(._execute(Request_)がないため、この例外が発生しています。むしろ、次のように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ブログ

13
Ritesh Gune

OkHttpの新しい2.0 RCを使用する必要があると思います。

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();
}
4
zapotec
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();

}
3
user3801095
@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;        
}

このように使用してください!

2
Gopi Cg

マニフェストファイルにインターネットアクセス許可を追加してみますか?

<uses-permission Android:name="Android.permission.INTERNET" />
1
Amit Garg

この行がありません

OkHttpClient client = new OkHttpClient();

1
rperryng

置き換える必要があるのは、This:

Response response = client.execute(request);

By:

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

次のようなクライアント変数を宣言する必要があります。

OkHttpClient client = new OkHttpClient();

また、スレッドまたはAsyncTaskを使用してリクエストを使用する必要があります!

AndroidこのリンクのAsyncTaskについて何か他のものを読むことができます: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and- forever /

0
deleon