接口MVP原生登录注册+搜索+recycleView切换展示
依赖
compile 'com.squareup.okhttp3:okhttp:3.9.1'
compile 'com.google.code.gson:gson:2.8.2'
compile 'com.android.support:design:26.+'
compile 'com.jcodecraeer:xrecyclerview:1.5.2'
compile 'com.github.bumptech.glide:glide:3.7.0'
权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
model包
LoginModel
import android.os.Handler;
import com.bwie.week2test.Contents;
import com.bwie.week2test.presenter.ILoginPresenter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class LoginModel implements ILoginModel{
private static Handler handler=new Handler();
@Override
public void login(String mobile, String password, final ILoginPresenter iLoginPresenter) {
String url=Contents.LOGIN+"?mobile="+mobile+"&password="+password;
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
.get()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
iLoginPresenter.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
iLoginPresenter.onSuccess(result);
}
});
}
}
});
}
}
ILoginModel接口
public interface ILoginModel {
void login(String mobile, String password, ILoginPresenter iLoginPresenter);
}
RegisterModel
public class RegisterModel implements IRegisterModel {
private static Handler handler=new Handler();
@Override
public void register(String mobile, String password, final IRegisterPresenter iRegisterPresenter) {
String url= Contents.REGISTER+"?mobile="+mobile+"&password="+password;
OkHttpClient okHttpClient=new OkHttpClient();
Request request=new Request.Builder()
.get()
.url(url)
.build();
Call call = okHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
handler.post(new Runnable() {
@Override
public void run() {
iRegisterPresenter.onFailed(e.getMessage());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if(response.isSuccessful()){
final String result = response.body().string();
handler.post(new Runnable() {
@Override
public void run() {
iRegisterPresenter.onSuccess(result);
}
});
}
}
});
}
}
接口IRegisterModel
public interface IRegisterModel {
void register(String mobile, String password, IRegisterPresenter iRegisterPresenter);
}
presenter包
ILoginPresenter
public interface ILoginPresenter {
void login(String mobile,String password);
void onFailed(String msg);
void onSuccess(Object o);
void onDestory();
}
LoginPresenter
public class LoginPresenter implements ILoginPresenter {
private ILoginView iLoginView;
private final LoginModel loginModel;
public LoginPresenter(ILoginView iLoginView) {
this.iLoginView = iLoginView;
loginModel = new LoginModel();
}
@Override
public void login(String mobile, String password) {
loginModel.login(mobile,password,this);
}
@Override
public void onFailed(String msg) {
if(null==iLoginView){
return;
}
iLoginView.onFailed(msg);
}
@Override
public void onSuccess(Object o) {
if(null==iLoginView){
return;
}
Gson gson=new Gson();
LoginBean loginBean = gson.fromJson(o.toString(), LoginBean.class);
String code = loginBean.getCode();
if("0".equals(code)){
iLoginView.onSuccess(loginBean.getMsg());
}else{
iLoginView.onFailed(loginBean.getMsg());
}
}
@Override
public void onDestory() {
if(null!=iLoginView){
iLoginView=null;
}
}
}
接口IRegisterPresenter
public interface IRegisterPresenter {
void register(String mobile,String password);
void onFailed(String msg);
void onSuccess(Object o);
void onDestory();
}
RegisterPresenter
public class RegisterPresenter implements IRegisterPresenter{
private IRegisterView iRegisterView;
private final RegisterModel registerModel;
public RegisterPresenter(IRegisterView iRegisterView) {
this.iRegisterView = iRegisterView;
registerModel = new RegisterModel();
}
@Override
public void register(String mobile, String password) {
registerModel.register(mobile,password,this);
}
@Override
public void onFailed(String msg) {
if(null==iRegisterView){
return;
}
iRegisterView.onFailed(msg);
}
@Override
public void onSuccess(Object o) {
if(null==iRegisterView){
return;
}
Gson gson=new Gson();
RegisterBean registerBean = gson.fromJson(o.toString(), RegisterBean.class);
String code = registerBean.getCode();
if("0".equals(code)){
iRegisterView.onSuccess(registerBean.getMsg());
}else{
iRegisterView.onFailed(registerBean.getMsg());
}
}
@Override
public void onDestory() {
if(null!=iRegisterView){
iRegisterView=null;
}
}
}
view包
接口ILoginView
public interface ILoginView {
void onFailed(String msg);
void onSuccess(Object o);
}
LoginActivity
public class LoginActivity extends AppCompatActivity implements ILoginView{
private LoginPresenter loginPresenter;
private EditText tel;
private EditText pwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
tel = (EditText) findViewById(R.id.mobile);
pwd = (EditText) findViewById(R.id.password);
loginPresenter = new LoginPresenter(this);
}
public void btnLogin(View view){
String mobile = tel.getText().toString();
String password = pwd.getText().toString();
loginPresenter.login(mobile,password);
}
public void btnRegister(View view){
Intent intent=new Intent(this,RegisterActivity.class);
startActivity(intent);
}
@Override
public void onFailed(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
if("天呢!用户不存在".equals(msg)){
Intent intent=new Intent(this,RegisterActivity.class);
startActivity(intent);
}
}
@Override
public void onSuccess(Object o) {
Toast.makeText(this, o.toString(), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,SearchActivity.class);
startActivity(intent);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
loginPresenter.onDestory();
}
}
接口IRegisterView
public interface IRegisterView {
void onFailed(String msg);
void onSuccess(Object o);
}
RegisterActivity
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import com.bwie.week2test.R;
import com.bwie.week2test.presenter.RegisterPresenter;
public class RegisterActivity extends AppCompatActivity implements IRegisterView{
private static RegisterPresenter registerPresenter;
private EditText regTel;
private EditText regPwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
regTel = (EditText) findViewById(R.id.regTel);
regPwd = (EditText) findViewById(R.id.regPwd);
registerPresenter=new RegisterPresenter(this);
}
public void regNow(View view){
String mobile = regTel.getText().toString();
String password = regPwd.getText().toString();
registerPresenter.register(mobile,password);
}
public void back(View view){
finish();
}
@Override
public void onFailed(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public void onSuccess(Object o) {
Toast.makeText(this, o.toString(), Toast.LENGTH_SHORT).show();
Intent intent=new Intent(this,LoginActivity.class);
startActivity(intent);
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
registerPresenter.onDestory();
}
}
SearchActivity
public class SearchActivity extends AppCompatActivity implements View.OnClickListener{
private ImageView mIvKindBack;
/**
* 请输入查找
*/
private EditText mTextView;
/**
* 搜索
*/
private TextView mSearchTxt;
private RecyclerView mRvyHot;
private ListView mRcyHistory;
/**
* 清空历史搜索
*/
private Button mClearBtn;
private SQLiteDatabase db;
private String name;
private DataBaseBean dataBaseBean;
private List<DataBaseBean> dataList = new ArrayList<>();
private HisetroyAdapter adapter;
private List<String> goodslist = new ArrayList<>();
private String searchName;
private List<String> stringList = new ArrayList<String>(){
{
add("应急启动电源");
add("餐桌");
add("粽子散装");
add("智能手表");
add("摩托车挂饰");
add("三只松鼠");
add("华为");
add("金士顿U盘");
add("苹果X");
add("三星耳机");
add("锤子手机");
add("伊利牛奶");
add("苹果笔记本");
add("按摩椅");
add("六个核桃");
add("公牛插座");
add("跑步机");
add("真皮钱包");
add("海澜之家");
add("阿玛尼");
add("阿迪达斯");
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
initView();
DatabaseHelper helper = new DatabaseHelper(this);
db = helper.getWritableDatabase();
adapter = new HisetroyAdapter(this,goodslist);
HotAdapter hotAdapter = new HotAdapter(this , stringList);
LinearLayoutManager manager = new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false);
mRvyHot.setLayoutManager(manager);
mRvyHot.setAdapter(hotAdapter);
}
private void initView() {
mIvKindBack = (ImageView) findViewById(R.id.iv_kind_back);
mTextView = (EditText) findViewById(R.id.textView);
mSearchTxt = (TextView) findViewById(R.id.search_txt);
mRvyHot = (RecyclerView) findViewById(R.id.rvy_hot);
mRcyHistory = (ListView) findViewById(R.id.rcy_history);
mClearBtn = (Button) findViewById(R.id.clear_btn);
mClearBtn.setOnClickListener(this);
mSearchTxt.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
default:
break;
case R.id.clear_btn:
String deleSql="delete from person";
db.execSQL(deleSql);
goodslist.clear();
adapter.notifyDataSetChanged();
break;
case R.id.search_txt:
name = mTextView.getText().toString().trim();
db.execSQL("insert into person(name) values(?)",new Object[]{name});
mTextView.setText("");
Intent intent = new Intent(SearchActivity.this,GoodsActivity.class);
intent.putExtra("data",name);
startActivity(intent);
break;
}
}
@Override
protected void onResume() {
super.onResume();
Log.e("zxz", "我又来了 " );
Cursor cursor = db.rawQuery("select *from person", null);
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
searchName = cursor.getString(1);
Log.e("zxz", "我是shujuk:"+name + id );
}
goodslist.add(searchName);
mRcyHistory.setAdapter(adapter);
adapter.notifyDataSetChanged();
}
}
Utils包
GsonUtils
public class GsonUtils {
private static Gson instance;
private GsonUtils() {
}