網絡請求OkHttp的使用

 okHttp:

1.okHttp是squere公司出的,在Android4.0之後盛行java

2.httpClient 在5.0中棄用,在6.0以Google的sdk中沒有該apiandroid

3.httpUrlConnection 系統自帶的,用的比較頻繁api

特色:鏈接效率高,能夠異步和同步app

須要導入兩個jar包:異步

okhttp-3.0.0-RC1.jar  okio-1.6.0.jar(okhttp內部依賴okio)ide

package fanggao.qf.okhttptest; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import java.io.IOException; import java.io.InputStream; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okhttp3.ResponseBody; public class MainActivity extends AppCompatActivity { private TextView textview; private static final String url = "http://m2.qiushibaike.com/article/list/text?page=1"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button button = (Button) findViewById(R.id.btn_download); textview = (TextView) findViewById(R.id.tv_text); } /** * 點擊下載數據 * @param view */
    public void onClick(View view){ //同步的方式,須要在子線程中運行,不然報錯
   /* new Thread(new Runnable() { @Override public void run() { getDataForGet(); } }).start();*/
        //異步 ,不須要開啓子線程
 getAsyncOkHttp(); } /** * 異步:同時執行多個 * 經過get請求獲取數據 * */
    private void getAsyncOkHttp() { OkHttpClient okHttpClient = new OkHttpClient(); Request request = new Request.Builder().get().url(url).build(); //異步:
        okHttpClient.newCall(request).enqueue(new Callback() { @Override public void onFailure(Request request, IOException e) { } @Override public void onResponse(Response response) throws IOException { final String string = response.body().String(); Log.i("tag","------"+Thread.currentThread().getId()); //只能在主線程中進行UI操做 //在主線程中進行
                runOnUiThread(new Runnable() { @Override public void run() { textview.setText(string); } }); } }); } /** * 同步:一次執行一個 * 經過get請求獲取數據 */
    private void getDataForGet() { try { //1.聲明okhttp客戶端
        OkHttpClient okHttpClient = new OkHttpClient(); //2.構造request //1.聲明構造器 ,設置請求方式,設置請求參數
        Request request = new Request.Builder().get().url(url).build(); //3.經過客戶端執行請求,得到response
            Response response = okHttpClient.newCall(request).execute(); //4,判斷響應是否成功
            if(response.isSuccessful()){ //得到響應實體
                ResponseBody body = response.body(); //得到string
               final  String string = body.string(); //得到bytep[]
                byte[] bytes = body.bytes(); //得到流
                InputStream inputStream = body.byteStream(); //在主線程中進行
                runOnUiThread(new Runnable() { @Override public void run() { textview.setText(string); } }); } Log.i("tag",Thread.currentThread().getName()); } catch (IOException e) { e.printStackTrace(); } } }

現象:
ui

相關文章
相關標籤/搜索