(Android) MVP模板 (使用okhttp-- get请求写的一个MVP模板)

来源:互联网 发布:矩阵的运算规律总结 编辑:程序博客网 时间:2024/06/14 03:53

效果图:



首先xml:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <EditText        android:id="@+id/et_username"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginTop="50dp"        android:hint="请输入用户名"        android:text="15910907758" />    <EditText        android:id="@+id/et_password"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="请输入密码"        android:inputType="textPassword"        android:text="123456" />    <Button        android:id="@+id/btn_login"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:text="登录" /></LinearLayout>


view 视图层:
package bawe.com.day_okhttp_1107;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.EditText;import bawe.com.day_okhttp_1107.presenter.LoginPresenter;/** * view 视图层 * */public class MainActivity extends AppCompatActivity implements View.OnClickListener,IView{    private static final String TAG = "MainActivity";    private EditText etUserName;    private EditText etPassword;    private Button btnLogin;    private LoginPresenter loginPresenter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        etUserName = (EditText) findViewById(R.id.et_username);        etPassword = (EditText) findViewById(R.id.et_password);        btnLogin = (Button) findViewById(R.id.btn_login);        loginPresenter = new LoginPresenter();        loginPresenter.assachView(this);        btnLogin.setOnClickListener(this);    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.btn_login:                String name = etUserName.getText().toString().trim();                String pass = etPassword.getText().toString().trim();                loginPresenter.login(name,pass);                break;        }    }    @Override    public void Success(String message) {        Log.i(TAG,"success:"+message);    }    @Override    public void Failed(String error) {        Log.i(TAG,"error:"+error);    }}
view视图层接口
/** * 视图层接口 */public interface IView {    void  Success(String message);    void  Failed(String error);}
===========================================================================
modle 模型层

package bawe.com.day_okhttp_1107.http;import java.io.IOException;import java.util.Map;import okhttp3.Call;import okhttp3.Callback;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;/** * modle 模型层 * */public class OkhttpUtils {    private static volatile OkhttpUtils instance;    private  OkHttpClient client;    private OkhttpUtils(){        //创建OkHttpClient 对象        client = new OkHttpClient();    }    //单列模式    public static OkhttpUtils getInstance(){        if (instance==null){            synchronized (OkhttpUtils.class){                if (null==instance){                    instance=new OkhttpUtils();                }            }        }        return instance;    }    /*    * okhttp封装的get请求    * */    public void get(String url, Map<String,String> map, final Okjiekou jiekou){        ////http://120.27.23.105/user/login?mobile=111111&password=123456        StringBuffer sb = new StringBuffer();        sb.append(url).append("?");        for (Map.Entry<String, String> entry : map.entrySet()) {            //拼接接口            sb.append(entry.getKey())                    .append("=")                    .append(entry.getValue())                    .append("&");        }        sb.deleteCharAt(sb.lastIndexOf("&"));        //2 创建Request 对象        Request build = new Request.Builder()                .get()                .url(sb.toString())                .build();        //3 创建call对象        Call call = client.newCall(build);        //4 khttp提供的callback回调接口        call.enqueue(new Callback() {            @Override            //请求失败的方法            public void onFailure(Call call, IOException e) {                //失败的时候返回异常 的信息                jiekou.onFailed(e.getMessage());            }            //请求成功的方法            @Override            public void onResponse(Call call, Response response) throws IOException {                //取出字符串                String string = response.body().string();                //成功之后调我们自己的回调方法                jiekou.onSuccess(string);            }        });    }}

模型层接口
/** * 模型层接口 */public interface Okjiekou {    void onSuccess(String message);    void onFailed(String error);}

================================================================

presenter层        连接 视图层和模型层的桥梁


package bawe.com.day_okhttp_1107.presenter;import java.util.HashMap;import bawe.com.day_okhttp_1107.IView;import bawe.com.day_okhttp_1107.http.OkhttpUtils;import bawe.com.day_okhttp_1107.http.Okjiekou;/** * presenter层      * 连接 视图层和模型层的桥梁 * */public class LoginPresenter {      private IView iv;    public void assachView(IView iv){        this.iv=iv;    }    public void login(String username, String password){        HashMap<String, String> map = new HashMap<>();        map.put("mobile",username);        map.put("password",password);        OkhttpUtils.getInstance().get("http://120.27.23.105/user/login", map, new Okjiekou() {            @Override            public void onSuccess(String message) {                iv.Success(message);            }            @Override            public void onFailed(String error) {                iv.Failed(error);            }        });    }
}



写这个模板主要就是比较简单的一个   MVP模式   方便日后套用    

原创粉丝点击