zoukankan      html  css  js  c++  java
  • android开发--okhttp

    一、okhttp简单实用:

    • 一般的get请求
    • 一般的post请求
    • 基于Http的文件上传
    • 文件下载
    • 加载图片
    • 支持请求回调,直接返回对象、对象集合
    • 支持session的保持

    二、实用教程

      1、添加android项目

      2、最新的jar okhttp he latest JAR ,添加依赖就可以用了。

        注意:okhttp内部依赖okio,别忘了同时导入okio:

        gradle: compile 'com.squareup.okio:okio:1.5.0'

        最新的jar地址:okio the latest JAR

      3、MainActivity代码

    package com.example.okhttp;
    
    import java.io.IOException;
    
    import com.squareup.okhttp.Call;
    import com.squareup.okhttp.Callback;
    import com.squareup.okhttp.OkHttpClient;
    import com.squareup.okhttp.Request;
    import com.squareup.okhttp.Response;
    
    import android.app.Activity;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    
    public class MainActivity extends Activity {
        
        private Button btn;
        private String json_str;
        private ImageView iv;
        private Bitmap bitmap;
        private String url1_json = "http://android2017.duapp.com/test1.jsp";
        private String url2_img = "http://www.admin10000.com/UploadFiles/Document/201307/14/20130714201135796898.JPG";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Log.i("Thread-id:", ""+Thread.currentThread().getId());
            
            iv = (ImageView)findViewById(R.id.imageView1);
            btn = (Button)findViewById(R.id.button1);
            btn.setOnClickListener(new OnClickListener() {
                
                @Override
                public void onClick(View v) {
                    OkHttpClient client = new OkHttpClient();
                    Request request = new Request.Builder()
                                        .url(url1_json)
                                        .build();
                    //希望得到一个response
                    //为了防止卡顿,把获取response掉到后台进程去
                    //调度
                    Call call = client.newCall(request);
                    call.enqueue(new Callback() {
                        
                        //子线程运行
                        @Override
                        public void onResponse(Response response) throws IOException {
                            
                            Log.i("Thread-id:", ""+Thread.currentThread().getId());
                            try {
                                Thread.sleep(3000);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            //读取文本
                            json_str = response.body().string();
                            //读取二进制
                            //bitmap = BitmapFactory.decodeStream( response.body().byteStream());
                            //iv.setImageBitmap(bitmap);
                            
                            
                            //Log.i("okHttp", json_str);
                            runOnUiThread(new Runnable() {
                                
                                @Override
                                public void run() {
                                    Log.i("Thread-id:", ""+Thread.currentThread().getId());
                                    Toast.makeText(MainActivity.this, json_str, 500).show();
                                    //iv.setImageBitmap(bitmap);
                                }
                            });
                            //Toast.makeText(MainActivity.this, json_str, 500).show();
                        }
                        
                        @Override
                        public void onFailure(Request arg0, IOException arg1) {
                            // TODO Auto-generated method stub
                            
                        }
                    });                              
                }
            });
        }
    }

      onResponse回调的参数是response,一般情况下,比如我们希望获得返回的字符串,可以通过response.body().string()获取;如果希望获得返回的二进制字节数组,则调用response.body().bytes();如果你想拿到返回的inputStream,则调用response.body().byteStream()看到这,你可能会奇怪,竟然还能拿到返回的inputStream,看到这个最起码能意识到一点,这里支持大文件下载,有inputStream我们就可以通过IO的方式写文件。不过也说明一个问题,这个onResponse执行的线程并不是UI线程。的确是的,如果你希望操作控件,还是需要使用handler等。

      

  • 相关阅读:
    map按照值排序
    结构体的三种排序方式
    归并排序
    数组模拟双向链表
    二刷斐波那契高精度
    2019年9月训练(贰)区间DP (luogu 4290)
    2019年9月训练(壹)数位DP (HDU 2089)
    2019年8月训练(贰)
    2019年8月训练(壹)二分,三分
    2019年7月训练(柒)
  • 原文地址:https://www.cnblogs.com/yuluo123/p/6149363.html
Copyright © 2011-2022 走看看