Android学习笔记02——OKHttp网络框架01

来源:互联网 发布:淘宝天天特价规则 编辑:程序博客网 时间:2024/06/05 04:22

使用OKhttp框架实现图片下载的功能

(1) 首先在AndroidMainfest.xml文件添加网络授权
 <uses-permission android:name="android.permission.INTERNET"></uses-permission>

(2) 在布局文件中添加一个Button和ImageView。
(3) 在MainActivity.java中用findViewById的方法获取Button和ImageView的id。
(4) 从网上找到一个图片的网址,并用String字符串保存
private String image_path = "http://avatar.csdn.net/C/7/B/1_xin93.jpg";
(5)将Handler的初步结构实现。
Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);        }    };

(5) 在Build.gradle文件下的dependencies{ }下添加
compile 'com.squareup.okhttp3:okhttp:3.+'compile 'com.squareup.picasso:picasso:2.5.2'
(6) 使用get请求方法获取图片信息
 Request request = new Request.Builder().url(image_path).build();
(7) 在Button的监听函数onClick函数中。将request传入client,加入队列,将Message发送到Handler
(8) 在Handler处理接收到的message。

MainActivity.java文件如下:
import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.Image;import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.telecom.Call;import android.view.View;import android.widget.Button;import android.widget.ImageView;import java.io.IOException;import java.security.acl.AclEntry;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;public class MainActivity extends AppCompatActivity {    private Button button;    private ImageView imageView;    private final static int SUCCESS_STATUS = 1;    private final static int FAIL_STATUS = 0;    private String image_path = "http://avatar.csdn.net/C/7/B/1_xin93.jpg";    OkHttpClient client;    Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            super.handleMessage(msg);            switch (msg.what){                case SUCCESS_STATUS:                    byte[] result = (byte[])msg.obj;                    Bitmap bitmap = BitmapFactory.decodeByteArray(result,0,result.length);                    imageView.setImageBitmap(bitmap);                    break;                case FAIL_STATUS:                    break;            }        }    };    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        button = (Button)findViewById(R.id.button);        imageView = (ImageView)findViewById(R.id.imageView);        client = new OkHttpClient();        //使用get请求方法        final Request request = new Request.Builder().url(image_path).build();        button.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View view) {                client.newCall(request).enqueue(new Callback() {                    @Override                    public void onFailure(okhttp3.Call call, IOException e) {                        e.printStackTrace();                    }                    @Override                    public void onResponse(okhttp3.Call call, Response response) throws IOException {                        Message message = new Message();                        if(response.isSuccessful()){                            message.what = SUCCESS_STATUS;                            message.obj = response.body().bytes();                            handler.sendMessage(message);                        }                        else{                            handler.sendEmptyMessage(FAIL_STATUS);                        }                    }                });            }        });    }}


运行结果:



0 0