Retrofit+RxJava网络请求登录注册

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();
}

}
布局太简单就不写了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值