标签:
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="java">package com.bruce.okhttpdemo; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.widget.ImageView; import java.io.IOException; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; import okio.BufferedSink; /** * compile 'com.squareup.okhttp3:okhttp:3.2.0' */ public class MainActivity extends Activity { ImageView img; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); img = (ImageView) findViewById(R.id.img); getStringByOkHttpGet(); } /** * 1-以上就是发送一个get请求的步骤,首先构造一个Request对象,参数最起码有个url, * 当然你可以通过Request.Builder设置更多的参数比如:header、method等。 2-然后通过request的对象去构造得到一个Call对象,类似于将你的请求封装成了任务, 既然是任务,就会有execute()和cancel()等方法。 3-最后,我们希望以异步的方式去执行请求,所以我们调用的是call.enqueue,将call加入调度队列, 然后等待任务执行完成,我们在Callback中即可得到结果。 */ /** * 一个简单的get请求(默认是get请求) */ private void getStringByOkHttpGet() { //创建okHttpClient对象 OkHttpClient mOkHttpClient = new OkHttpClient(); //创建一个Request final Request request = new Request.Builder() .url("https://github.com/hongyangAndroid") .build(); //新建一个请求-- call Call call = mOkHttpClient.newCall(request); //然后把这个请求加入调度队列 call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.w("onFailure", "" + e.toString()); } /** * onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取; * 如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream() 看到这,你可能会奇怪,竟然还能拿到返回的inputStream,看到这个最起码能意识到一点,这里支持大文件下载, 有inputStream我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。 的确是的,如果你希望操作控件,还是需要使用handler等, * @param call * @param response * @throws IOException */ @Override public void onResponse(Call call, Response response) throws IOException { //String htmlStr = response.body().string(); Log.w("onResponse", "" + response.body().string()); } }); } private void getStringByPost() { OkHttpClient mOkHttpClient = new OkHttpClient(); RequestBody requestBody = new RequestBody() { @Override public MediaType contentType() { return null; } @Override public void writeTo(BufferedSink sink) throws IOException { } }; Request request = new Request.Builder() .url("www.baidu.com") .post(requestBody) .build(); mOkHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { } }); } private static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); private final OkHttpClient client = new OkHttpClient(); public void run() throws Exception { String postBody = "" + "Releases\n" + "--------\n" + "\n" + " * _1.0_ May 6, 2013\n" + " * _1.1_ June 15, 2013\n" + " * _1.2_ August 11, 2013\n"; Request request = new Request.Builder() .url("https://api.github.com/markdown/raw") .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody)) .build(); Response response = client.newCall(request).execute(); if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); System.out.println(response.body().string()); } public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); 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(); } }
标签:
原文地址:http://blog.csdn.net/bruceyangjie/article/details/51351864