利用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小贴士
阅读全文
0 0
- 利用OKHttp实现 图片上传 ---b509小贴士
- Okhttp实现上传图片
- OKHttp上传图片实现,进度监听
- Android okHttp图片上传
- 使用Okhttp上传图片
- 使用OkHttp上传图片
- OKhttp上传图片
- Okhttp上传图片
- 使用OkHttp上传图片
- 利用vb实现图片上传
- 使用OkHttp+popupwindow显示底部状态栏实现上传图片功能
- Android okhttp上传图片文件
- 利用iframe实现无刷新图片上传
- Android利用webservices实现图片远程上传
- 利用iframe实现图片跨域上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传 -
- iOS利用AFNetworking(AFN) 实现图片上传
- iOS- 利用AFNetworking(AFN) - 实现图片上传
- Redis 3.2.8 集群模式+Sentinel多Master部署
- 模型评估
- 加密机加密内容的格式
- faster rcnn 笔记
- Android平台之获取照相机预览数据帧及精确时间截
- 利用OKHttp实现 图片上传 ---b509小贴士
- build gcc 5.4.0
- 设计模式:简单工厂模式
- SEO关键词密度一般多少合适?你还在纠结2%-8%?
- c字符串转换函数atoi、atof、atol
- easyui datagrid 弹窗添加修改删除
- 各种网络库比较 asio libevent
- 为什么zookeeper的节点配置的个数必须是奇数个
- [问题记录]按url context path设置nginx反向代理禅道和Jenkins