MVP层
《Views 》
public interface Views {
void success(int type, String data);
void fail(int type, String error);
}
《Model 》
public interface Model {
interface CallBackListener {
void success(int type, String data);
void fail(int type, String error);
}
void register(int type, String url, Map<String, String> map, CallBackListener listener);
void login(int type, String url, Map<String, String> map, CallBackListener listener);
}
《ModelIml 实现类》
public class ModelIml implements Model {
@Override
public void register(int type, String url, Map<String, String> map, CallBackListener listener) {
HttpUtils httpUtils = new HttpUtils().post(url, map);
result(type, listener, httpUtils);
}
@Override
public void login(int type, String url, Map<String, String> map, CallBackListener listener) {
HttpUtils httpUtils = new HttpUtils().post(url, map);
result(type, listener, httpUtils);
}
private void result(final int type, final CallBackListener listener, HttpUtils httpUtils) {
httpUtils.result(new HttpUtils.HttpListener() {
@Override
public void success(String data) {
listener.success(type, data);
}
@Override
public void fail(String error) {
listener.fail(type, error);
}
});
}
}
《Presenter 》
public interface Presenter {
void register(int type, String url, Map<String, String> map);
void login(int type, String url, Map<String, String> map);
}
《Presenter实现类》
public class PresenterIml implements Presenter, Model.CallBackListener {
private Model model;
private Views views;
public PresenterIml(Model model, Views views) {
this.model = model;
this.views = views;
}
@Override
public void register(int type, String url, Map<String, String> map) {
model.register(type, url, map, this);
}
@Override
public void login(int type, String url, Map<String, String> map) {
model.login(type, url, map, this);
}
@Override
public void success(int type, String data) {
views.success(type, data);
}
@Override
public void fail(int type, String error) {
views.fail(type, error);
}
public void destory() {
if (model != null) {
model = null;
}
if (views != null) {
views = null;
}
System.gc();
}
}
《HttpServer 》
public interface HttpServer {
@GET
Observable<ResponseBody> get(@Url String url, @HeaderMap Map<String, String> headMap, @QueryMap Map<String, String> map);
@POST
Observable<ResponseBody> post(@Url String url, @HeaderMap Map<String, String> headMap, @QueryMap Map<String, String> map);
}
《HttpUtils 》
public class HttpUtils {
private String baseUrl = “http://mobile.bwstudent.com”;
private Map<String, String> headmap = new HashMap<>();
private HttpListener mhttpListener;
public HttpUtils setMap(Map<String, String> headmap) {
this.headmap = headmap;
return this;
}
public HttpUtils get(String url, Map<String, String> map) {
if (map == null) {
map = new HashMap<>();
}
HttpServer server = null;
try {
server = HttpServer();
} catch (IOException e) {
e.printStackTrace();
}
Observable<ResponseBody> observable = server.get(url, headmap, map);
send(observable);
return this;
}
public HttpUtils post(String url, Map<String, String> map) {
HttpServer server = null;
try {
server = HttpServer();
} catch (IOException e) {
e.printStackTrace();
}
Observable<ResponseBody> observable = server.post(url, headmap, map);
send(observable);
return this;
}
private void send(Observable<ResponseBody> observable) {
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<ResponseBody>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(ResponseBody responseBody) {
try {
String data = responseBody.string();
mhttpListener.success(data);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onError(Throwable e) {
String error = e.getMessage();
mhttpListener.fail(error);
}
@Override
public void onComplete() {
}
});
}
private HttpServer HttpServer() throws IOException {
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
Cache cache = new Cache(file, 10 * 1024);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
return chain.proceed(request);
}
})
.cache(cache)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
return retrofit.create(HttpServer.class);
}
public interface HttpListener {
void success(String data);
void fail(String error);
}
public void result(HttpListener mhttpListener) {
this.mhttpListener = mhttpListener;
}
}
《TowActivity 登录》
public class TowActivity extends AppCompatActivity implements Views, View.OnClickListener {
@BindView(R.id.edit_phone)
EditText phone;
@BindView(R.id.edit_passd)
EditText password;
private SharedPreferences sp;
private PresenterIml presenterIml;
private String rag_phone;
private String rag_password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tow);
sp = getSharedPreferences("user", MODE_PRIVATE);
ButterKnife.bind(this);
findViewById(R.id.text_zhuce).setOnClickListener(this);
findViewById(R.id.button_denglu).setOnClickListener(this);
presenterIml = new PresenterIml(new ModelIml(), this);
}
@Override
protected void onResume() {
super.onResume();
rag_phone = sp.getString("edit_phone", null);
rag_password = sp.getString("edit_passd", null);
if (!TextUtils.isEmpty(rag_phone)) {
phone.setText(rag_phone);
}
if (!TextUtils.isEmpty(rag_password)) {
password.setText(rag_password);
}
}
private void toast(String msg) {
Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button_denglu:
dologin();
break;
case R.id.text_zhuce:
Intent intent = new Intent(TowActivity.this, ThreeActivity.class);
startActivity(intent);
break;
}
}
private void dologin() {
String phone_name = phone.getText().toString().trim();
String pass_word = password.getText().toString().trim();
Log.i("ooo", phone_name);
if (TextUtils.isEmpty(phone_name)) {
toast("请输入账号");
return;
}
if (TextUtils.isEmpty(pass_word)) {
toast("请输入密码");
return;
}
// presenterIml.login(1, phone_name, pass_word);
Map<String, String> map = new HashMap<>();
map.put("phone", phone_name);
map.put("pwd", pass_word);
presenterIml.login(1, "/small/user/v1/login", map);
}
@Override
public void success(int type, String data) {
if (type == 1) {
UserBean bean = new Gson().fromJson(data, UserBean.class);
String nickName = bean.getResult().getNickName();
String phone = bean.getResult().getPhone();
String headPic = bean.getResult().getHeadPic();
String sessionId = bean.getResult().getSessionId();
int userId = bean.getResult().getUserId();
sp.edit().putInt("userId", userId)
.putString("sessionId", sessionId)
.putString("phone", phone)
.putString("headPic", headPic)
.putString("nickName", nickName).commit();
Log.i("sop", sp.toString());
finish();
}
}
@Override
public void fail(int type, String error) {
}
}
《ThreeActivity 注册》
public class ThreeActivity extends AppCompatActivity implements View.OnClickListener, Views {
@BindView(R.id.phone_name)
EditText name_phone;
@BindView(R.id.yanzheng_edit)
EditText edit_yanzheng;
@BindView(R.id.mm_edit)
EditText edit_mm;
private SharedPreferences sp;
private PresenterIml presenterIml;
private String name;
private String yanzheng;
private String mm;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_three);
ButterKnife.bind(this);
presenterIml = new PresenterIml(new ModelIml(), this);
sp = getSharedPreferences("user", MODE_PRIVATE);
findViewById(R.id.text_denglu).setOnClickListener(this);
findViewById(R.id.button_zhuce).setOnClickListener(this);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.text_denglu:
finish();
break;
case R.id.button_zhuce:
doRegister();
break;
}
}
private void doRegister() {
name = name_phone.getText().toString().trim();
yanzheng = edit_yanzheng.getText().toString().trim();
mm = edit_mm.getText().toString().trim();
if (TextUtils.isEmpty(name)) {
toast("请输入您的手机号");
return;
}
if (TextUtils.isEmpty(yanzheng)) {
toast("请输入您的密码");
return;
}
if (TextUtils.isEmpty(mm)) {
toast("请确认您的密码");
return;
}
if (!yanzheng.equals(mm)) {
toast("请检查您的密码是否一致");
return;
}
Map<String, String> map = new HashMap<>();
map.put("phone", name);
map.put("pwd", yanzheng);
presenterIml.register(2, "/small/user/v1/register", map);
}
@Override
public void success(int type, String data) {
if (type == 2) {
toast(data);
UserBean bean = new Gson().fromJson(data, UserBean.class);
toast(bean.getMessage());
sp.edit().putString("phone_name", name).commit();
Log.i("iii", sp.toString());
if (bean.getStatus().equals("0000")) {
finish();
}
}
}
@Override
public void fail(int type, String error) {
}
private void toast(String mag) {
Toast.makeText(this, mag, Toast.LENGTH_SHORT).show();
}
}
布局太简单就不写了