概述:
这次带来了一个实际案例的操作,利用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); } } }); } }); }}
新闻热点
疑难解答