利用OKHttp实现 图片上传 ---b509小贴士

来源:互联网 发布:淘宝退款多了会怎么样 编辑:程序博客网 时间:2024/05/22 15:05

最近项目需要图片上传,向大家推荐个框架okHttp,挺好用的,至于下载方法,小盆友们自己百度吧,我这里简单介绍一下怎么在手机客户端,访问手机相册图片,以及向服务端上传图片的功能,废话不多说,,,

第一步、github下载okhttp的jar包(这里就不多说,百度)

第二部、新建工程。。。。(省略一万字)
简单布局如下

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:fitsSystemWindows="true"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_main"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical"    tools:context="com.lockscreen.activity.UploadActivity">    <Button        android:text="从相册选择照片"        android:layout_width="match_parent"        android:layout_height="60dp"        android:id="@+id/button_get_photo"        android:layout_margin="10dp"/>    <Button        android:text="上传"        android:layout_width="match_parent"        android:layout_height="60dp"        android:id="@+id/btn_upload_img"        android:layout_margin="10dp"/>    <ImageView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:minHeight="200dp"        android:minWidth="200dp"        android:layout_gravity="center"        android:id="@+id/imageView_camera"/></LinearLayout>

第三步、相应的java代码的实现(我这里用的主要是Okhttp3):

package com.lockscreen.activity;import android.app.Activity;import android.content.Intent;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;import android.widget.Toast;import com.lockscreen.R;import java.io.File;import java.io.IOException;import okhttp3.Call;import okhttp3.Callback;import okhttp3.MediaType;import okhttp3.MultipartBody;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.RequestBody;import okhttp3.Response;public class UploadActivity extends Activity implements View.OnClickListener {    private Button btn_upload_img, mButtonGetPhoto;    private ImageView mImageViewPhoto;    //处理手机图片    public static final int PHOTO_RESOUL = 3;    public static final String IMAGE_UNSPECIFIED = "image/*";    private Uri uri;    //okhttp 上传图片    private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");    private final OkHttpClient client = new OkHttpClient();    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_upload);        initUI();    }    //初始化UI    private void initUI() {        mButtonGetPhoto = (Button) findViewById(R.id.button_get_photo);        btn_upload_img = (Button) findViewById(R.id.btn_upload_img);        mImageViewPhoto = (ImageView) findViewById(R.id.imageView_camera);        mButtonGetPhoto.setOnClickListener(this);        btn_upload_img.setOnClickListener(this);    }    /**     * 点击事件     *     * @param view     */    @Override    public void onClick(View view) {        switch (view.getId()) {            case R.id.btn_upload_img:                uploadImg();                break;            case R.id.button_get_photo:                //获取本地相册                Intent intent = new Intent(Intent.ACTION_PICK, null);                intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, IMAGE_UNSPECIFIED);                startActivityForResult(intent, PHOTO_RESOUL);                Log.e("gaoyu", "调用相册成功");                break;        }    }    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        //处理结果        if (requestCode == PHOTO_RESOUL) {            uri = data.getData();            if (uri != null) {                mImageViewPhoto.setImageURI(uri);                Log.e("gaoyu", "照片显示成功");            }        }    }    /**     * 上传方法     */    private void uploadImg() {        MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM);        File f = new File(String.valueOf(uri));        if (f != null) {            builder.addFormDataPart("img", f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f));        }        MultipartBody requestBody = builder.build();        //构建请求        Request request = new Request.Builder()                .url("这里放服务器地址")//地址                .post(requestBody)//添加请求体                .build();        client.newCall(request).enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                Toast.makeText(UploadActivity.this, "上传失败:e.getLocalizedMessage() = ", Toast.LENGTH_SHORT).show();                Log.e("gaoyu", "上传失败:e.getLocalizedMessage() = "+e.getLocalizedMessage());            }            @Override            public void onResponse(Call call, Response response) throws IOException {                Toast.makeText(UploadActivity.this, "上传成功", Toast.LENGTH_SHORT).show();                Log.e("gaoyu", "上传照片成功:response = "+ response.body().string());            }        });    }}

基本客户端需要的东西都在这了,如果需要服务端的实现可依据需关注
解释在代码里的注释已经很清楚了。。。thankyou! ———b509小贴士

原创粉丝点击