接口
public interface IMainView extends IBaseView{
//成功
public void callBackSuccess(NewsBean newsBean);
//失败
public void callBackOnerror(String err);
}
public interface IBaseView {}
presenter类
public class IMainPresenter extends IBasePresenter<IMainView> implements HttpUtils.CallbackData<NewsBean>{
private final HttpUtils httpUtils;
public IMainPresenter(){
httpUtils = HttpUtils.getInstance();
httpUtils.setCallbackInstance(this);
}
@Override
public void onReponse(NewsBean newsBean) {
getView().callBackSuccess(newsBean);
}
@Override
public void onFailure(IOException e) {
}
public void Login(String path, String phones, String pwds) {
httpUtils.postData(path,phones,pwds);
Log.e("输出", "Login: " );
}
public void register(String path, String phones, String pwds) {
httpUtils.postData(path,phones,pwds);
Log.e("输出","register:");
}
}
BasePresenter
public class IBasePresenter<V> {
private V mview;
public void setView(V v){
this.mview = v;
}
public void detachView(){
this.mview = null;
}
public V getView(){
return mview;
}
}
okhttpUtils
public class HttpUtils <T>{
//单列模式
private static HttpUtils httpUtils;
public static HttpUtils getInstance(){
if(httpUtils==null){
return new HttpUtils();
}else{
return httpUtils;
}
}
private CallbackData callback;
private HttpUtils(){}
public void setCallbackInstance(CallbackData callbackInstance){
this.callback = callbackInstance;
}
private CallbackData callbackData;
public void setCallback(CallbackData callback){
this.callbackData = callback;
}
@SuppressLint("HandlerLeak")
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
T obj = (T) msg.obj;
callbackData.onReponse(obj);
}
};
//okhttp get请求
//public void getData(String url,String username,String password){}
//okhttp post请求 封装
public void postData(String url,String phones,String pwds){
//获取okheepclient对象
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.connectTimeout(5, TimeUnit.SECONDS)
.readTimeout(5, TimeUnit.SECONDS)
.build();
//获取forbody对象
FormBody formBody = new FormBody.Builder()
.add("phone",phones)
.add("pwd",pwds)
.build();
//获取一个request对象
Request request = new Request.Builder().url(url).post(formBody).build();
Log.e("输出", "onFailure: " );
//获取一个call对象
Call call = okHttpClient.newCall(request);
//异步请求
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.e("输出", "onFailure: "+call.toString() );
//接口回掉
callback.onFailure(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String string = response.body().string();
Gson gson = new Gson();
NewsBean newsBean = gson.fromJson(string, NewsBean.class);
callback.onReponse(newsBean);
}
});
}
public void getData(String url, Class<NewsBean> newsBeanClass) {
}
public interface CallbackData<D>{
void onReponse(D d);
void onFailure(IOException e);
}
}
HomeActivity
HomeActivity 注册
public class HomeActivity extends AppCompatActivity implements IMainView {
@BindView(R.id.username)
EditText username;
@BindView(R.id.password)
EditText password;
@BindView(R.id.register)
Button register;
private IMainPresenter presenter;
private String path = "http://172.17.8.100/small/user/v1/register";
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
NewsBean newsBean = (NewsBean) msg.obj;
if (newsBean.getStatus().equals("0000")){
Toast.makeText(HomeActivity.this,"注册成功,请前往登录页面登录",Toast.LENGTH_LONG).show();
Intent intent = new Intent(HomeActivity.this, MainActivity.class);
startActivity(intent);
}else{
Toast.makeText(HomeActivity.this,"注册失败,手机号格式错误",Toast.LENGTH_LONG).show();
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.register_layout);
ButterKnife.bind(this);
initData();
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String phones = username.getText().toString();
String pwds = password.getText().toString();
presenter.Login(path,phones,pwds);
}
});
}
private void initData() {
//创建P层且绑定
presenter = new IMainPresenter();
presenter.setView(this);
}
@Override
public void callBackSuccess(NewsBean newsBean) {
Log.e("myMessage1",""+newsBean.getMessage());
Message message = new Message();
message.obj= newsBean;
handler.sendMessage(message);
Log.e("myMessage2", "" +newsBean.getStatus());
}
@Override
public void callBackOnerror(String err) {
}
//解绑
@Override
protected void onDestroy() {
super.onDestroy();
presenter.detachView();
}
}
MainActivity 登录
public class MainActivity extends AppCompatActivity implements IMainView { @BindView(R.id.username) EditText username; @BindView(R.id.password) EditText password; @BindView(R.id.login) Button login; @BindView(R.id.reg) Button reg; private String path = "http://172.17.8.100/small/user/v1/login"; private IMainPresenter presenter; Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); NewsBean newsBean = (NewsBean) msg.obj; if (newsBean.getStatus().equals("0000")) { Toast.makeText(MainActivity.this, "登陆成功", Toast.LENGTH_LONG).show(); Intent intent = new Intent(MainActivity.this, ShowActivity.class); startActivity(intent); } else { Toast.makeText(MainActivity.this, "登陆失败,请检查手机号和密码", Toast.LENGTH_LONG).show(); } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); initData(); reg.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, HomeActivity.class); startActivity(intent); } }); } private void initData() { //创建P层且绑定 presenter = new IMainPresenter(); presenter.setView(this); } @Override public void callBackSuccess(NewsBean newsBean) { Log.e("myMessage1", "" + newsBean.getMessage()); Message message = new Message(); message.obj = newsBean; handler.sendMessage(message); Log.e("myMessage2", "" + newsBean.getStatus()); } @Override public void callBackOnerror(String err) { } //解绑 @Override protected void onDestroy() { super.onDestroy(); presenter.detachView(); } @OnClick(R.id.login) public void onViewClicked() { String phones = username.getText().toString(); String pwds = password.getText().toString(); presenter.Login(path, phones, pwds); } }