私がやろうとしていること ::
Okhttp の使用方法を学習しようとしています
私がしたこと ::
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);
asThe method execute(Request) is undefined for the type OkHttpClient
メソッド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の新しい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();
}
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();
}
@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;
}
このように使用してください!
マニフェストファイルにインターネットアクセス許可を追加してみますか?
<uses-permission Android:name="Android.permission.INTERNET" />
この行がありません
OkHttpClient client = new OkHttpClient();
置き換える必要があるのは、This:
Response response = client.execute(request);
By:
Response response = client.newCall(request).execute();
次のようなクライアント変数を宣言する必要があります。
OkHttpClient client = new OkHttpClient();
また、スレッドまたはAsyncTaskを使用してリクエストを使用する必要があります!
AndroidこのリンクのAsyncTaskについて何か他のものを読むことができます: http://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and- forever /