Mvp2Activity
public class Mvp2Activity extends AppCompatActivity implements IView, View.OnClickListener {
private EditText name,pwd;
private IpresenterImpl ipresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvp2);
ipresenter=new IpresenterImpl(this);
initView();
}
//找控件
private void initView() {
name=findViewById(R.id.mvp2_name);
pwd=findViewById(R.id.mvp2_password);
pwd.invalidate();
findViewById(R.id.mvp2_login).setOnClickListener(this);
findViewById(R.id.mvp2_sign).setOnClickListener(this);
}
@Override
public void onClick(View v) {
//点击事件
switch (v.getId()){
case R.id.mvp2_login:
checkPermission();
break;
default:break;
}
}
private void checkPermission() {
//判断是否是6.0版本以上的
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
//动态添加权限
if(ContextCompat.checkSelfPermission(this,Manifest.permission.INTERNET)!=PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.INTERNET},100);
}else{
startRequest();
}
}else{
startRequest();
}
}
//开始请求数据
private void startRequest() {
String string1 = name.getText().toString();
String string2 = pwd.getText().toString();
ipresenter.startRequest("http://120.27.23.105/user/login?mobile="+string1+"&password="+string2,null);
}
@Override
public void showResponseData(Object data) {
//接收返回的数据
ReBean reBean= (ReBean) data;
Toast.makeText(this,String.valueOf(reBean.getMsg()),Toast.LENGTH_SHORT).show();
}
}
IpersenterImpl
public class IpresenterImpl implements Ipresenter{
private Imodelmpl imodelmpl;
private IView iView;
public IpresenterImpl(IView iview) {
this.iView=iview;
imodelmpl=new Imodelmpl();
}
@Override
public void startRequest(String url, String params) {
imodelmpl.requestData(url, params, new MyCallBack() {
@Override
public void setData(Object data) {
//view接口返回数据
iView.showResponseData(data);
}
});
}
public void onDetach(){
if(imodelmpl!=null){
imodelmpl=null;
}
if (iView!=null){
iView=null;
}
}
}
Imodelmpl
public class Imodelmpl implements Imodel{
private MyCallBack myCallBack;
private Handler mhandler=new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 0:
//通过callback返回解析完 得到的数据
ReBean reBean= (ReBean) msg.obj;
if(myCallBack!=null){
myCallBack.setData(reBean);
}
break;
default:break;
}
}
};
@Override
public void requestData(final String url, String params, MyCallBack callBack) {
myCallBack=callBack;
new Thread(new Runnable() {
@Override
public void run() {
try {
//解析请求到的数据
String jsonStr = HttpUtils.get(url);
Gson gson = new Gson();
ReBean reBean=gson.fromJson(jsonStr,ReBean.class);
mhandler.sendMessage(mhandler.obtainMessage(0,reBean));
} catch (Exception e) {
e.printStackTrace();
mhandler.sendMessage(mhandler.obtainMessage(0,"错误"));
}
}
}).start();
}
}
HttpUtils
public class HttpUtils {
public static String get(String urlStr) throws Exception {
URL url = new URL(urlStr);
//由一个有效的网址服务返回这个对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
String inputStr = getInputStr(stream);
return inputStr;
}
//把流转成字符串
private static String getInputStr(InputStream stream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
StringBuffer sb = new StringBuffer();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
return sb.toString();
}
}
Ipresenter
public interface Ipresenter {
void startRequest(String url,String params);
}
Imodel
public interface Imodel {
void requestData(String url,String params,MyCallBack callBack);
}
IView
public interface IView<T> {
void showResponseData(T data);
}
MyCallBack
public interface MyCallBack<T> {
void setData(T data);
}
ReBean 类
public class ReBean<T> {
private String msg;
private String code;
private T data;
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;
}
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}