MVP中 application 包中 定义公共路径名的普通类
public class Constant { public static final String BASE_URL="https://www.zhaoapi.cn/"; }
MVP中 model层中 bean类
public class ReturnBean { /** * msg : 天呢!用户名或密码不能为空 * code : 1 * data : {} */ private String msg; private String code; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } }
model层中 https包中 okhttp的写法
public class HttpUitl implements Callback{ private static HttpUitl INSTANCE; private final OkHttpClient okHttpClient; private HttpUtilsCallback mHttpUtilsCallback; private HttpUitl(){ okHttpClient = new OkHttpClient.Builder().build(); } public static HttpUitl getInstance(){ if(INSTANCE ==null){ INSTANCE =new HttpUitl(); } return INSTANCE; } public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); public String doGet(String path) { Request request = new Request.Builder().url(Constant.BASE_URL + path).build(); Call call = okHttpClient.newCall(request); call.enqueue(this); return "data ok"; } public void doPost(String path, HashMap<String,String> map, HttpUtilsCallback httpUtilsCallback) { //String url = "https://www.zhaoapi.cn/product/searchProducts"; this.mHttpUtilsCallback = httpUtilsCallback; FormBody.Builder builder = new FormBody.Builder(); Iterator<String> iterator = map.keySet().iterator(); while (iterator.hasNext()) { String key = iterator.next(); String value = map.get(key); builder.add(key, value); } FormBody formBody = builder.build(); Request request = new Request.Builder() .url(Constant.BASE_URL + path) .post(formBody) .build(); Call call = okHttpClient.newCall(request); call.enqueue(this); } @Override public void onFailure(Call call, IOException e) { } @Override public void onResponse(Call call, Response response) throws IOException { String string = response.body().string(); mHttpUtilsCallback.onSuccess(string); } }
model层中 HttpUtilsCallback 接口的写法
public interface HttpUtilsCallback { void onSuccess(String str); void onFail(int errCode,String errMsg); }
MVP 中 pressenter层的写法
public class BasePerssenter<V extends IBaseView>{ public V mIbaseView; public void attacheView(V ibaseView){ this.mIbaseView=ibaseView; } public V getView(){ return mIbaseView; } public void detachView(){ mIbaseView=null; } }
public class LoginPerssenter extends BasePerssenter<ILoginView>{ private final HttpUitl httpUitl; //public Context context public LoginPerssenter() { httpUitl = HttpUitl.getInstance(); } public void login(String path, HashMap<String, String> hashMap){ httpUitl.doPost(path, hashMap, new HttpUtilsCallback(){ @Override public void onSuccess(String str) { Log.e("my","=="+str); Looper.prepare(); ILoginView view = getView(); Gson gson = new Gson(); ReturnBean returnBean = gson.fromJson(str, ReturnBean.class); String code = returnBean.getCode(); String msg = returnBean.getMsg(); if(code.equals("1")){ Toast.makeText((Context)view, ""+msg, Toast.LENGTH_SHORT).show(); }else{ Intent intent = new Intent((Context)view, RecViewActivity.class); ((Context)view).startActivity(intent); } Looper.loop(); } @Override public void onFail(int errCode, String errMsg) { } }); } }
public class MainPerssenter extends BasePerssenter<IMainView> { private final HttpUitl httpUitl; //public Context context public MainPerssenter() { httpUitl = HttpUitl.getInstance(); } public void register(String path, HashMap<String, String> hashMap) { httpUitl.doPost(path, hashMap, new HttpUtilsCallback() { @Override public void onSuccess(String str) { Log.e("myMessage","== "+str); Looper.prepare(); IMainView view = getView(); Gson gson = new Gson(); ReturnBean returnBean = gson.fromJson(str, ReturnBean.class); String code = returnBean.getCode(); String msg = returnBean.getMsg(); if(code.equals("1")){ Toast.makeText((Context)view, ""+msg, Toast.LENGTH_SHORT).show(); // return; }else{ Intent intent = new Intent((Context)view, LoginActivity.class); ((Context)view).startActivity(intent); } Looper.loop(); } @Override public void onFail(int errCode, String errMsg) { } }); } public void login(){ IMainView view = getView(); Intent intent = new Intent((Context)view, LoginActivity.class); ((Context)view).startActivity(intent); } }
MVP中 Utils包中 正则表达式的普通类的写法
public class CommonUtil { public static boolean isMobileNO(String mobiles){ Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$"); Matcher m = p.matcher(mobiles); System.out.println(m.matches()+"---"); return m.matches(); } }
MVP中 view层 activitys包的写法
public abstract class BaseActivity<P extends BasePerssenter> extends AppCompatActivity implements IBaseView{ public P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // TApplication.getInstance().addActivity(this); setContentView(setChildContentView()); initView(); initBaseData(); initData(); } protected abstract int setChildContentView(); protected abstract void initData(); protected abstract void initView(); private void initBaseData() { presenter=setPresenter(); if(presenter!=null){ presenter.attacheView(this); }else{ try { throw new Exception("出错了"); } catch (Exception e) { e.printStackTrace(); } } } protected abstract P setPresenter(); }
public class LoginActivity extends BaseActivity<LoginPerssenter> implements ILoginView,View.OnClickListener{ private EditText login_name; private EditText login_password; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void initData() { } @Override protected void initView() { login_name = findViewById(R.id.login_name); login_password = findViewById(R.id.login_password); findViewById(R.id.login_sure).setOnClickListener(this); } @Override protected LoginPerssenter setPresenter() { return new LoginPerssenter(); } @Override protected int setChildContentView() { return R.layout.activity_login; } @Override public void onClick(View view) { switch (view.getId()){ case R.id.login_sure: String name = login_name.getText().toString(); String passwrd = login_password.getText().toString(); if(!CommonUtil.isMobileNO(name)){ Toast.makeText(LoginActivity.this,getResources().getString(R.string.wrong_mobile_num),Toast.LENGTH_SHORT).show(); return; } if(passwrd==null||passwrd==""){ Toast.makeText(LoginActivity.this,getResources().getString(R.string.wrong_password),Toast.LENGTH_SHORT).show(); return; } if(presenter != null) { String path = "user/login"; HashMap<String,String> hashMap = new HashMap<>(); hashMap.put("mobile",name); hashMap.put("password",passwrd); presenter.login(path,hashMap); } break; } } @Override public void onSuccess(String str) { Log.e("myMessage",""+str); } @Override protected void onDestroy() { super.onDestroy(); presenter.detachView(); } }
public class MainActivity extends BaseActivity<MainPerssenter> implements IMainView,View.OnClickListener{ private EditText password; private EditText mobile; private EditText password_sure; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public void onSuccess(String str) { Log.e("myMessage",""+str); } @Override protected void initData() { // presenter.loadDataFromServer(); } @Override protected void initView() { password = findViewById(R.id.password); mobile = findViewById(R.id.mobile); password_sure = findViewById(R.id.password_sure); findViewById(R.id.register).setOnClickListener(this); findViewById(R.id.login).setOnClickListener(this); } @Override protected MainPerssenter setPresenter() { return new MainPerssenter(); } @Override protected int setChildContentView() { return R.layout.activity_main; } @Override protected void onDestroy() { super.onDestroy(); presenter.detachView(); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.register: String phoneNum = mobile.getText().toString(); String passwrd = password.getText().toString(); String passwrd_sure = password_sure.getText().toString(); if(!CommonUtil.isMobileNO(phoneNum)){ Toast.makeText(MainActivity.this,getResources().getString(R.string.wrong_mobile_num),Toast.LENGTH_SHORT).show(); return; } if(passwrd==null||passwrd==""){ Toast.makeText(MainActivity.this,getResources().getString(R.string.wrong_password),Toast.LENGTH_SHORT).show(); return; } if(!passwrd.equals(passwrd_sure)){ Toast.makeText(MainActivity.this,getResources().getString(R.string.wrong_password_diff),Toast.LENGTH_SHORT).show(); return; } if(presenter != null) { String path = "user/reg"; HashMap<String,String> hashMap = new HashMap<>(); hashMap.put("mobile",phoneNum); hashMap.put("password",passwrd); presenter.register(path,hashMap); } break; case R.id.login: presenter.login(); } } }
MVP 中 view层 的interfaces接口包的写法
public interface IBaseView {
}
public interface ILoginView extends IBaseView{ public void onSuccess(String str); }
public interface IMainView extends IBaseView { public void onSuccess(String str); }