IV接口数据展示到View
Ip接口写的是绑定、解绑、传递请求到M层
IM接口是p层传递的数据、异步请求、然后拼接接口并且使用PostMan 然后回传传
然后P层需要关联View
还有连接Model 调用Model的接口 并且实现接口类
并把接口软引用进行处理、
并且把Model拿到的数据传递给Iview接口
V层需要调用P层 P层的数据绑定给当前的Activity、然后当点击的时候传入输入的值、
//上代码
先分包
``Iv的展示数据
package com.example.dell.dierci.view;
public interface IView {
//数据展示到View
public void showData(String response);
}
Ip需要绑定View和解绑View 然后需要关联M层
package com.example.dell.dierci.presenter;
import com.example.dell.dierci.view.IView;
public interface IPresenter {
//绑定绑定解绑
public void Attach(IView iView);
public void Detach(IView iView);
//传递给M层进行数据请求
public void requestData(String name,String pwd);
}
IM层需要服务器网络请i求、然后服务器会返回值
package com.example.dell.dierci.model;
public interface IModel {
//请求数据
public void getData(String name,String pwd,CallBack callBack);
public interface CallBack{
//成功
public void Success(String data);
//返回
public void Fail(String error);
}
}
IM的实现类 需要请求数据 创建异步请求请求、然后使用PostMan、然后把数据回传给P层
package com.example.dell.dierci.model;
import android.os.AsyncTask;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class loginModelImpl implements IModel {
private String str="http://172.17.8.100/small/user/v1/register";
@Override
public void getData(String name, String pwd, CallBack callBack) {
//请求数据
//发送异步请求
new SubAysncTask(name, pwd,callBack).execute(str);
}
//内部类创建
class SubAysncTask extends AsyncTask<String, Integer, String> {
String userName;
String pwd;
CallBack callBack;
public SubAysncTask(String userName, String pwd, CallBack callBack) {
this.userName = userName;
this.pwd = pwd;
this.callBack = callBack;
}
@Override
protected String doInBackground(String... urlStrings) {
try {
//请求的URL字串
String urlString = urlStrings[0];
//String completeUrlString = urlString + "?phone=\'userName\'+pwd=\'pwd\'";
String completeUrlString = urlString + "?phone=" + userName + "&pwd=" + pwd;
//请求的URL地址
URL url = new URL(completeUrlString);
//请求对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方法
//参数提交
//提交的数据有phone、pwd
connection.setRequestMethod("POST");
//连接
connection.connect();
//判断请求码
if (connection.getResponseCode() == 200) {
StringBuilder stringBuilder = new StringBuilder();
String line = null;
//输入流读取
InputStream inputStream = connection.getInputStream();
//搞笑字节流
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
while ((line = br.readLine()) != null) {
stringBuilder.append(line);
}
//把读取的内容转换成字串
return stringBuilder.toString();
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String resposne) {
super.onPostExecute(resposne);
// 数据回传给P层,接口回调
callBack.Success(resposne);
}
}
}
IP获取Iv的接口 和IM的接口 和IM实现的方法、然后为了防止内存泄露需要使用软引用、然后P层会调用Model的方法
package com.example.dell.dierci.presenter;
import com.example.dell.dierci.model.IModel;
import com.example.dell.dierci.model.loginModelImpl;
import com.example.dell.dierci.view.IView;
import java.lang.ref.SoftReference;
public class loginpresenterImpl implements IPresenter {
IView iView;
private IModel iModel;
private SoftReference<IModel> reference;
@Override
public void Attach(IView iView) {
this.iView = iView;
//imodel实现的是loginModelImpl方法
//强引用 还需要弱引用转换
iModel=new loginModelImpl();
//声明软引用
reference=new SoftReference<>(iModel);
}
@Override
public void Detach(IView iView) {
reference.clear();
}
@Override
public void requestData(String name, String pwd) {
iModel.getData(name, pwd, new IModel.CallBack() {
@Override
public void Success(String data) {
iView.showData(data);
}
@Override
public void Fail(String error) {
}
});
}
}
页面的代码
关联P层调用M的数据、M的数据已经村给P层 、所以调用P层 并且绑定给当前的页面、然后还有是输入的内容传给P层然后在掉给M层进行访问数据
package com.example.dell.dierci;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.example.dell.dierci.presenter.IPresenter;
import com.example.dell.dierci.presenter.loginpresenterImpl;
import com.example.dell.dierci.view.IView;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
public class MainActivity extends AppCompatActivity implements IView {
@BindView(R.id.edit_name)
EditText name;
@BindView(R.id.edit_pwd)
EditText pwd;
@BindView(R.id.btn_click)
Button btnClick;
private IPresenter iPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
//创建P层对象7
iPresenter = new loginpresenterImpl();
//接受V层对象
iPresenter.Attach(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//解绑
iPresenter.Detach(MainActivity.this);
}
//展示数据 需要连接P层
@Override
public void showData(String response) {
Toast.makeText(MainActivity.this, response + "", Toast.LENGTH_LONG).show();
}
@OnClick(R.id.btn_click)
public void onViewClicked() {
String nam = name.getText().toString();
String pw = pwd.getText().toString();
//点击时触发、P层请求M层的数据
iPresenter.requestData(nam, pw);
}
}