首先添加一个依赖:
mplementation 'com.squareup.okhttp3:okhttp:3.11.0'
然后添加权限 网络、读写、
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
布局:就两个按钮,一个图片 <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="10dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_upload" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="上传图片" /> <Button android:id="@+id/btn_load" android:layout_width="0dp" android:layout_weight="1" android:layout_height="wrap_content" android:text="下载图片" /> </LinearLayout> <ImageView android:id="@+id/img_view" android:layout_width="match_parent" android:layout_height="wrap_content"/> </LinearLayout>
逻辑---Activity
import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.IOException; import java.util.concurrent.TimeUnit; 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 MainActivity extends AppCompatActivity implements View.OnClickListener { public static final String PATH = "https://10.url.cn/eth/ajNVdqHZLLAxibwnrOxXSzIxA76ichutwMCcOpA45xjiapneMZsib7eY4wUxF6XDmL2FmZEVYsf86iaw/"; public static final String URL = "https://www.718shop.com/sell/sell.m.picture.upload.do"; private Button btn_upload; private Button btn_load; private ImageView img_view; public static final int FALL = 123; public static final int SUCCESS = 100; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what){ case SUCCESS: //加载网络成功,进行UI的更新,处理得到的图片资源 byte[] obj = (byte[]) msg.obj;//通过message,拿到字节数组 Bitmap bitmap = BitmapFactory.decodeByteArray(obj, 0, obj.length);//使用BitmapFactory工厂,把字节数组转换为bitmap img_view.setImageBitmap(bitmap); //通过ImageView,设置图片 break; case FALL://当加载网络失败,执行的逻辑代码 Toast.makeText(MainActivity.this,"下载失败",Toast.LENGTH_SHORT).show(); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控件 initView(); } /** * 根据点击事件获取络上的图片资源,使用的是OKhttp框架 * * @param v */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_upload://上传 //注意打印以下路径 Log.i("yz",""+Environment.getExternalStorageDirectory() + "/Pictures/Screenshots"); //创建上传文件对象 File file = new File(Environment.getExternalStorageDirectory() + "/Pictures/Screenshots", "meinv.png"); //创建RequestBody封装参数 RequestBody requestBody = RequestBody.create(MediaType.parse("application/octet-stream"), file); //创建MultipartBody,给RequestBody进行设置 MultipartBody multipartBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("image", "meinv.png", requestBody) .build(); //创建Request Request requests = new Request.Builder() .url(URL) .post(multipartBody) .build(); //创建okhttp对象 OkHttpClient okHttpClients = new OkHttpClient.Builder() .readTimeout(10, TimeUnit.SECONDS) .connectTimeout(10,TimeUnit.SECONDS) .writeTimeout(10,TimeUnit.SECONDS) .build(); //上传完图片,得到服务器反馈数据 okHttpClients.newCall(requests).enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { Log.i("yz",""+e); } @Override public void onResponse(Call call, Response response) throws IOException { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this,"上传成功",Toast.LENGTH_SHORT).show(); } }); } }); break; case R.id.btn_load://下载 //1. 创建OKhttpClient对象 OkHttpClient okHttpClient = new OkHttpClient.Builder() .readTimeout(10, TimeUnit.SECONDS) .connectTimeout(10,TimeUnit.SECONDS) .writeTimeout(10,TimeUnit.SECONDS) .build(); //2.建立Request对象,设置参数,请求方式如果是get,就不用设置,默认使用的就是get Request request = new Request.Builder().url(PATH).build(); //3.创建一个Call对象,参数是request对象,发送请求 Call call = okHttpClient.newCall(request); //4.异步请求,请求加入调度 call.enqueue(new Callback() { @Override//请求失败回调 public void onFailure(Call call, IOException e) { handler.sendEmptyMessage(FALL); } @Override//请求成功回调 public void onResponse(Call call, Response response) throws IOException { //得到从网上获取资源,转换成我们想要的类型 byte[] bytes = response.body().bytes(); //通过handler更新UI Message msg = handler.obtainMessage(); msg.obj = bytes; msg.what = SUCCESS; handler.sendMessage(msg); } }); break; } } private void initView() { btn_upload = findViewById(R.id.btn_upload); btn_load =findViewById(R.id.btn_load); img_view = findViewById(R.id.img_view); btn_upload.setOnClickListener(this); btn_load.setOnClickListener(this); } }