MVP架构设计的新手例子

1.要用到okhttp,权限及配置如下:

<uses-permission android:name="android.permission.INTERNET"/>
compile 'com.squareup.okhttp3:okhttp:3.7.0'

2.网络任务处理类(本来要写一个接口,再继承接口写一个类,这里直接用一个类,便于理解)

public class InternetTask {
    private ChuLi chuli; //另一个接口

    public InternetTask(ChuLi chuli) { //将主activity传入(主activity实现chuli接口)
        this.chuli = chuli;
    }

    public void startInternet(String ip){
        OkHttpClient okhttp = new OkHttpClient();
        RequestBody formbody = new FormBody.Builder()
                .add("ip", ip)
                .build();
        final Request request = new Request.Builder()
                .url("http://ip.taobao.com/service/getIpInfo.php")
                .post(formbody)
                .build();
        Call call = okhttp.newCall(request);
        call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                chuli.onerror(); //用自己的接口写处理,这样可以在主activity写处理
            }

            @Override
            public void onResponse(Call call, Response response) throws IOException {
                chuli.onsuccess(response);
            }
        });
    }

}

3.chuli接口,根据okhttp的不同返回,调用不同的方法

public interface ChuLi {
    void onerror();
    void onsuccess(Response response);
}

4.主activity 实现 chuli 接口

public class MainActivity extends AppCompatActivity implements ChuLi{
    TextView show;
    Button qq;
    EditText ipip;
    InternetTask task;
    StringBuilder sb = new StringBuilder();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        task = new InternetTask(this); //chuli的接口传入,这样可以在该activity写返回事件

        qq = (Button) findViewById(R.id.qq);
        show = (TextView) findViewById(R.id.show);
        ipip = (EditText) findViewById(R.id.ipip);

        qq.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String ip = ipip.getText().toString();
                task.startInternet(ip); //返回事件就在这个aCTIVITY
            }
        });


    }

    @Override
    public void onerror() { //返回事件
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                sb.append("网络超时"+"\n");
                show.setText(sb.toString());
            }
        });
    }

    @Override
    public void onsuccess(final Response response) { //返回事件
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                try {
                    sb.append(response.body().string()).append("\n");
                    show.setText(sb);
                } catch (IOException e) {
                    sb.append("请求出错"+"\n");
                    show.setText(sb);
                }
            }
        });
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值