概述:
这次带来了一个实际案例的操作,利用RxJava+OKHttp实现用户登录功能。
也是在开发中有实际作用价值的,在这里记录下。
JsonUtils.java:
public class JsonUtils {
/**
* @param json
* @return
*/
//用来检测reusltCode是否是错误码
public static boolean parserJson(String json) {
boolean flag = false;
try{
int result = new JSONObject(json).getJSONObject("result").getInt("resultCode");
if (result!=1){
flag = false;
}else{
flag = true;
}
}catch(JSONException e){
e.printStackTrace();
}
return flag;
}
}
LoginUtils.java:
public class LoginUtils {
private OkHttpClient client;
public LoginUtils() {
client = new OkHttpClient();
}
/**
* 定义了login操作,使用RxAndroid的编程思想
* @param url
* @param params
* @return
*/
public Observable<String> login(String url,Map<String,String> params){
return Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
if (!subscriber.isUnsubscribed()){
FormBody.Builder builder = new FormBody.Builder();
if (params!=null&&!params.isEmpty()){
for(Map.Entry<String,String> entry:params.entrySet()){
builder.add(entry.getKey(),entry.getValue());
}
}
RequestBody requestBody = builder.build();
//构建post请求
Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
subscriber.onError(e);
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
subscriber.onNext(response.body().string());
}
subscriber.onCompleted();//访问结束
}
});
}
}
});
}
}
MainActivity.java:
public class MainActivity extends ActionBarActivity {
private final String TAG = MainActivity.class.getSimpleName();
private Button button;
private EditText username;
private EditText password;
private ProgressDialog dialog;
private LoginUtils utils;
private final String LOGIN = "http://192.168.72.196:8080/webproject/LoginAction";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button);
username = (EditText) this.findViewById(R.id.editText);
dialog = new ProgressDialog(this);
dialog.setTitle("login......");
utils = new LoginUtils();
password = (EditText) this.findViewById(R.id.editText2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//将参数封装成Map集合
Map<String, String> params = new HashMap<String, String>();
params.put("username", username.getText().toString().trim());
params.put("password", password.getText().toString().trim());
utils.login(LOGIN, params).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
dialog.dismiss();
}
@Override
public void onError(Throwable e) {
Log.i(TAG, e.getMessage());
}
@Override
public void onNext(String s) {
dialog.show();
// Log.i(TAG,s);
if (JsonUtils.parserJson(s)){
//Log.i(TAG,"success");
Intent intent = new Intent(MainActivity.this,MainScreen.class);
startActivity(intent);
}
}
});
}
});
}
}