安卓02day2MVC模式

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模式只需要在接口封装方法即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值