MVC模式
把代码封装进入一个类实现接口从而调用区中的方法便于使用
接口的代码
package com.example.mydaydl03.moudou;
import com.example.mydaydl03.Insert.Backhttp;
public interface getmoudou {
void get(String str, final Backhttp backhttp);
}
创建一个接口用一个类去调用它
实现类的代码
package com.example.mydaydl03.moudou;
import com.example.mydaydl03.Insert.Backhttp;
import com.example.mydaydl03.MyHttpUtil;
public class Dia implements getmoudou{
@Override
public void get(String str, final Backhttp backhttp) {
MyHttpUtil.getMyHttpUtil().httpget(str,backhttp);
}
}
使用类实现接口封装接口的方法从而调用它
接口
package com.example.mydaydl03.Insert;
public interface Backhttp {
void Ok(String str);
void No(String str);
}
package com.example.mydaydl03.Insert;
public interface BackProgerss {
void finish();
void no(String str);
void getprogress(int pro);
}
创建两个接口使用HTTP时会调用
封装类的代码
package com.example.mydaydl03;
import android.os.Environment;
import android.util.Log;
import com.example.mydaydl03.Insert.BackProgerss;
import com.example.mydaydl03.Insert.Backhttp;
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 java.util.concurrent.TimeUnit;
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.ResponseBody;
import okhttp3.logging.HttpLoggingInterceptor;
public class MyHttpUtil {
private OkHttpClient client;
private MyHttpUtil() {
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("token","yyh").build();
return chain.proceed(request);
}
};
client = new OkHttpClient.Builder()
.callTimeout(1, TimeUnit.MINUTES)
.connectTimeout(1, TimeUnit.MINUTES)
.addInterceptor(interceptor)
.addInterceptor(httpLoggingInterceptor)
.build();
}
public static MyHttpUtil myHttpUtil;
public static MyHttpUtil getMyHttpUtil(){
if (myHttpUtil==null){
synchronized (Object.class){
if (myHttpUtil==null){
myHttpUtil=new MyHttpUtil();
}
}
}
return myHttpUtil;
}
public void httpget(String str, final Backhttp backhttp){
Request request = new Request.Builder()
.url(str)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
backhttp.No(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
backhttp.Ok(response.body().string());
}
});
}
public void gttppost(String str, HashMap<String,String> map, final Backhttp backhttp){
FormBody.Builder body = 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();
body.add(key,value);
}
FormBody formBody = body.build();
Request request = new Request.Builder()
.url(str)
.post(formBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
backhttp.No(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
backhttp.Ok(response.body().string());
}
});
}
public void drow(String str, final String path, final BackProgerss backProgerss){
Request request = new Request.Builder()
.url(str)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
backProgerss.no(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
ResponseBody body = response.body();
long max = body.contentLength();
InputStream inputStream = body.byteStream();
int len=0;
byte[] b=new byte[1024];
int count=0;
FileOutputStream fileOutputStream = new FileOutputStream(new File(path,"aaa.txt"));
while((len=inputStream.read(b))!=-1){
count+=len;
fileOutputStream.write(b,0,len);
Log.i("---", "onResponse: "+count);
int i = (int) (count * 100 / len);
backProgerss.getprogress(i);
Log.i("---", "onResponse: "+i);
}
backProgerss.finish();
}
});
}
public void gofile(String str, String path, String filename, String type, final BackProgerss backProgerss){
MultipartBody body=new MultipartBody.Builder()
.setType(MultipartBody.FORM)//设置方式
.addFormDataPart("file",filename, RequestBody.create(MediaType.parse(type),new File(path)))
.build();
Request request = new Request.Builder().url(str).post(body).build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
backProgerss.no(e.getMessage());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
backProgerss.finish();
}
});
}
}
这是一个Http类的封装他可以调用其方法里面又使用接口回调可以直接使用
Activity的代码
package com.example.mydaydl03;
import android.Manifest;
import android.os.Bundle;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.example.mydaydl03.Insert.BackProgerss;
import com.example.mydaydl03.Insert.Backhttp;
import com.example.mydaydl03.moudou.Dia;
import java.io.File;
import java.util.HashMap;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private String getstr = "http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&itemid=2&act=ad_app";
private Button main_get;
private Button main_post;
private Button main_down;
private Button main_go;
private ProgressBar main_onepro;
private ProgressBar main_twopro;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},100);
initView();
}
private void initView() {
main_get = (Button) findViewById(R.id.main_get);
main_post = (Button) findViewById(R.id.main_post);
main_down = (Button) findViewById(R.id.main_down);
main_go = (Button) findViewById(R.id.main_go);
main_get.setOnClickListener(this);
main_post.setOnClickListener(this);
main_down.setOnClickListener(this);
main_go.setOnClickListener(this);
main_onepro = (ProgressBar) findViewById(R.id.main_onepro);
main_onepro.setOnClickListener(this);
main_twopro = (ProgressBar) findViewById(R.id.main_twopro);
main_twopro.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.main_get:
// Toast.makeText(this, "444", Toast.LENGTH_SHORT).show();
// MyHttpUtil.getMyHttpUtil().httpget(getstr, new Backhttp() {
// @Override
// public void Ok(String str) {
// Log.i("---", "Ok: " + str);
// }
//
// @Override
// public void No(String str) {
//
// }
// });
Dia dia = new Dia();
dia.get(getstr, new Backhttp() {
@Override
public void Ok(String str) {
Log.i("--------", "Ok: "+str);
}
@Override
public void No(String str) {
Log.i("--------", "Ok: "+str);
}
});
break;
case R.id.main_post:
Toast.makeText(this, "444", Toast.LENGTH_SHORT).show();
HashMap<String, String> hashMap = new HashMap<>();
hashMap.put("itemid", "2");
hashMap.put("act", "ad_app");
// itemid=2&act=ad_app
MyHttpUtil.getMyHttpUtil().gttppost("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&", hashMap, new Backhttp() {
@Override
public void Ok(String str) {
Log.i("---", "Ok: " + str);
}
@Override
public void No(String str) {
Log.i("---", "NO: " + str);
}
});
break;
case R.id.main_down:
main_onepro.setMax(100);
File file = Environment.getExternalStorageDirectory();
Log.i("---", "finish: " + file.getPath());
File file1 = Environment.getExternalStorageDirectory();
MyHttpUtil.getMyHttpUtil().drow("http://api.yunzhancn.cn/api/app.interface.php?siteid=78703&act=column&ctype=2&mid=16", file1.getPath(), new BackProgerss() {
@Override
public void finish() {
Log.i("---", "finish: 下载成功");
}
@Override
public void no(String str) {
Log.i("---", "finish: " + str);
}
@Override
public void getprogress(int pro) {
main_onepro.setProgress(pro);
}
});
break;
case R.id.main_go:
main_twopro.setMax(100);
MyHttpUtil.getMyHttpUtil().gofile("http://169.254.2.69/hfs/", "/sdcard/Music/Gifty - 戒烟(Cover:李荣浩).mp3", "aaa", "aaa.mp3", new BackProgerss() {
@Override
public void finish() {
Log.i("-------", "finish: 完成");
}
@Override
public void no(String str) {
Log.i("-------", "finish: "+str);
}
@Override
public void getprogress(int pro) {
}
});
break;
}
}
}
第一个GET请求是使用MVC模式接口调用其他的使用的是Http封装如要都是用MVC模式只需要在接口封装方法即可