MVP的逻辑性思维都在P层,他降低了页面的耦合度,具备低耦合的特性,MVP的出现使代码更具逻辑性
首先我们看到分包的严谨性
MVP的结构分析 : P层负责整体逻辑并且将M层和V层联系起来,M层主要负责代码块, Callback将结果集返回P层,V层最后展示视图
注意以下接口:
public interface MyCallBack<T> {
void setData(T data);
}
public interface IModel {
void startResquestData(String url, String phone, String pass, MyCallBack callBack);
}
public interface IPresenter {
void resquestData(String url,String phone,String pass);
}
public interface IView<T> {
void showResquestData(T data);
}
工具类
public class MyHttpsUntils {
public static String get(String murl,String phone,String pass){
try {
URL url = new URL(murl+"?username="+phone+"&password="+pass);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
if(connection.getResponseCode()==200){
InputStream stream = connection.getInputStream();
String s = getStr(stream);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static String getWorkData(String murl){
try {
URL url = new URL(murl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
if(connection.getResponseCode()==200){
InputStream stream = connection.getInputStream();
String s = getStr(stream);
return s;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static String getStr(InputStream stream) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String con;
while((con=reader.readLine())!=null){
buffer.append(con);
}
return buffer.toString();
};
}
P层
public IPresenterImpl(IView iView) {
this.iView = iView;
iModel = new IModelImpl();
}
@Override
public void resquestData(String url, String phone, String pass) {
iModel.startResquestData(url, phone, pass, new MyCallBack() {
@Override
public void setData(Object data) {
iView.showResquestData(data);
}
});
}
M层
public class IModelImpl implements IModel {
private MyCallBack callBack;
@SuppressLint("HandlerLeak")
private Handler mhandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==0){
String d = (String) msg.obj;
Gson gson = new Gson();
MyLogin myLogin = gson.fromJson(d, MyLogin.class);
if(myLogin.getData()!=null){
MyLogin login = new MyLogin();
login.setCode(myLogin.getCode());
callBack.setData(login);
}else{
callBack.setData(myLogin);
}
}
}
};
@Override
public void startResquestData(final String url, final String phone, final String pass, MyCallBack callBack) {
this.callBack = callBack;
new Thread(new Runnable() {
@Override
public void run() {
String data = MyHttpsUntils.get(url,phone,pass);
mhandler.sendMessage(mhandler.obtainMessage(0,data));
}
}).start();
}
}