package com.example.weekhomework.Utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.Interceptor;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
public class OKHttpUtil {
private static OKHttpUtil okHttpUtil;
private OkHttpClient okHttpClient;
public OKHttpUtil() {
HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor();
httpLoggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
Interceptor interceptor = new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request().newBuilder().header("Home", "Work").build();
return chain.proceed(request);
}
};
okHttpClient=new OkHttpClient.Builder().addInterceptor(interceptor).addInterceptor(httpLoggingInterceptor).build();
}
public static OKHttpUtil getOkHttpUtil() {
if(okHttpUtil==null){
synchronized (Object.class){
okHttpUtil=new OKHttpUtil();
}
}
return okHttpUtil;
}
public void doGetData(String url, final MyCallBack myCallBack){
Request request = new Request.Builder().url(url).get().build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
myCallBack.onError(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
myCallBack.onSuccess(response.body().string());
}
});
}
public void doPostData(String url, final HashMap<String,String> map, final MyCallBack myCallBack){
FormBody.Builder formBody = new FormBody.Builder();
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
String key = entry.getKey();
String value = entry.getValue();
formBody.add(key,value);
}
FormBody build = formBody.build();
final Request request = new Request.Builder().url(url).post(build).build();
okHttpClient.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
myCallBack.onError(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
myCallBack.onSuccess(response.body().string());
}
});
}
public void downLoad(String url, final String path, final MyProCallBack myCallBack){
Request build = new Request.Builder().url(url).get().build();
okHttpClient.newCall(build).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
myCallBack.onError(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
InputStream is = response.body().byteStream();
FileOutputStream fileOutputStream = new FileOutputStream(path);
byte[] bytes = new byte[1024];
int len=0;
long max=response.body().contentLength();
int count=0;
while((len=is.read(bytes))!=-1){
fileOutputStream.write(bytes,0,len);
count+=len;
myCallBack.setPro((int)(count*100/max));
}
myCallBack.onSuccess("下载成果!");
}
});
}
public void upLoad(String fileName, String mediaType, String pathName, String url, final MyCallBack myCallBack){
//上传文件的请求体
MultipartBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("file", fileName,//aaaa.mp3 服务器端的名字
RequestBody.create(MediaType.parse(mediaType), new File(pathName)))
.build();
final Request request = new Request.Builder()
.url(url)
.post(requestBody)//post提交必须要设置请求体 http://169.254.113.244/hfs/
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
myCallBack.onSuccess("上传成功");
}
});
}
}
package com.example.weekhomework;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.example.weekhomework.Utils.MyCallBack;
import com.example.weekhomework.Utils.MyProCallBack;
import com.example.weekhomework.Utils.OKHttpUtil;
import java.util.HashMap;
import okhttp3.OkHttpClient;
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void click(View view) {
switch (view.getId()){
case R.id.get:
get();
break;
case R.id.post:
post();
break;
case R.id.down:
downLoad();
break;
case R.id.up:
upF();
break;
}
}
private void upF() {
OKHttpUtil.getOkHttpUtil().upLoad("xxx.mp4", "media.mp4",
"/sdcard/下载的小视频.mp4", "http://169.254.137.51/test/", new MyCallBack() {
@Override
public void onError(String wrong) {
Log.i(TAG, "onfaile: "+wrong);
}
@Override
public void onSuccess(String message) {
Log.i(TAG, "onsuccess: "+message);
}
});
}
//汚れつちまつた悲しみに
private void downLoad() {
OKHttpUtil.getOkHttpUtil().downLoad("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&itemid=2&act=ad_app", "/sdcard/http.txt", new MyProCallBack() {
@Override
public void onError(String wrong) {
Log.i(TAG, "onfaile: "+wrong);
}
@Override
public void onSuccess(String message) {
Log.i(TAG, "onsuccess: "+message);
}
@Override
public void setPro(int position) {
}
});
}
private void post() {
//itemid=2&act=ad_app
HashMap<String, String> map = new HashMap<>();
map.put("itemid","2");
map.put("act","ad_app");
OKHttpUtil.getOkHttpUtil().doPostData("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&", map, new MyCallBack() {
@Override
public void onError(String wrong) {
Log.i(TAG, "onfaile: "+wrong);
}
@Override
public void onSuccess(String message) {
Log.i(TAG, "onsuccess: "+message);
}
});
}
private void get() {
OKHttpUtil.getOkHttpUtil().doGetData("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&itemid=2&act=ad_app", new MyCallBack() {
@Override
public void onError(String wrong) {
Log.i(TAG, "onfaile: "+wrong);
}
@Override
public void onSuccess(String message) {
Log.i(TAG, "onsuccess: "+message);
}
});
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>