package com.example.mvp4;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.example.project.R;
public class MainActivity extends AppCompatActivity implements IView,View.OnClickListener {
private Button button;
private TextView textView;
private String url = "http://www.zhaoapi.cn/user/reg?mobile=18210302397&password=123456";
//实现persenter类
private PersenterOne mPersenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.three_activity);
mPersenter = new PersenterOne(this);
initData();
}
private void initData() {
textView = findViewById(R.id.text_view);
button = findViewById(R.id.sure_but);
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
int id = v.getId();
switch (id)
{
case R.id.sure_but:
checkPermisson();
break;
default:
break;
}
}
private void checkPermisson() {
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();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==100&&grantResults[0]==PackageManager.PERMISSION_GRANTED)
{
startRequest();
}
}
private void startRequest() {
mPersenter.startRequest(url,null);
}
@Override
public void showResult(Object data) {
RegBean regBean = (RegBean) data;
textView.setText(String.valueOf(regBean.getData()));
Toast.makeText(this,String.valueOf(regBean.getData()),Toast.LENGTH_LONG).show();
}
}
V层 负责显示绘制
package com.example.mvp4;
public interface IView{
//请求成功返回的数据
void showResult(T data);
}
M层实现类
package com.example.mvp4;
import android.os.Handler;
import android.os.Message;
import com.example.mvp3.IModel;
import com.example.mvp3.MyCallBack;
import com.google.gson.Gson;
public class Model implements Imodel {
//handler处理消息
private com.example.mvp4.MyCallBack myCallBack;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch (msg.what)
{
case 0:
RegBean obj = (RegBean) msg.obj;
if(myCallBack!=null)
{
myCallBack.setData(obj);
}
break;
default:
break;
}
}
};
@Override
public void requestData(final String data, String params, com.example.mvp4.MyCallBack myCallBack) {
new Thread(new Runnable() {
@Override
public void run() {
try {
String request = HttpUtils.getRequest(data);
Gson gson = new Gson();
RegBean regBean = gson.fromJson(request, RegBean.class);
handler.sendMessage(handler.obtainMessage(0,regBean));
}catch (Exception e){
e.printStackTrace();
handler.sendMessage(handler.obtainMessage(0,"错误"));
}
}
});
}
}
M接口类
package com.example.mvp4;
public interface Imodel {
void requestData(String data,String params,MyCallBack myCallBack);
}
P层实现类
package com.example.mvp4;
import android.support.annotation.NonNull;
public class PersenterOne implements StartPersenter{
private Model mModel;
private IView miView;
public PersenterOne(@NonNull IView iView){
miView = iView;
mModel = new Model();
}
@Override
public void startRequest(String url, String pamars) {
mModel.requestData(url, pamars, new com.example.mvp4.MyCallBack() {
@Override
public void setData(Object data) {
miView.showResult(data);
}
});
}
public void DetchView(){
if(mModel!=null)
{
mModel =null;
}
if(miView!=null)
{
miView = null;
}
}
}
P 接口类
package com.example.mvp4;
public interface StartPersenter {
//p层的接口 里面简单封装了一个开始请求网络的数据 开始
void startRequest(String url,String pamars);
}
CallBack 进行回传值
package com.example.mvp4;
public interface MyCallBack{
void setData(T data);
}