要实现的效果是 java
下面是个人理解
mController.sendAsyncMessage(LOGIN,userName,passWord);android
由于 mController 是 UserController,因此在 BaseController.java 中调取的 handleMessage(action, values);网络
就是调取 UserController中 handleMessage 方法app
在 BaseActivity.java 中 ide
其实就是调取MainActivity.java 中 handlerMessage这个方法布局
定义两个基类this
BaseActivity.javaspa
package com.example.anroidtestdemo;.net
import android.app.Activity;
import android.os.Handler;
import android.os.Message;xml
public abstract class BaseActivity extends Activity implements IModeChangeListener {
//更改UI的方法
protected Handler mHandler = new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
handlerMessage(msg);
};
};
//初始化数据
protected void initData() {
// default Empty implementn
}
//发送请求的方法
protected void handlerMessage(Message msg) {
// default Empty implementn
}
//初始化界面
protected void initController() {
// default Empty implementn
}
//初始化UI
protected abstract void initUI();
//实现一个更新 返回处理不一样UI的action
@Override
public void onModeChanged(int action, Object... values) {
mHandler.obtainMessage(action, values[0]).sendToTarget();
}
}
BaseController.java 基类(主要用来作初始化接口,获取getContext,获取提交过来的数据进行处理)
package com.example.anroidtestdemo;
import android.content.Context;
public abstract class BaseController {
//初始化接口
protected IModeChangeListener mListener;
protected Context mContext;
public void setIModeChangeListener(IModeChangeListener listener) {
mListener=listener;
}
public BaseController(Context c) {
mContext=c;
}
/**
* @param action 一个页面可能有多个网络请求,用来区别这些请求的
* @param values 请求的数据
*/
public void sendAsyncMessage(final int action,final Object... values){
new Thread(){
@Override
public void run() {
handleMessage(action, values);
}
}.start();
}
/**
* 子类处理具体的需求的业务代码
*/
protected abstract void handleMessage(int action,Object... values);
}
一个监听接口
IModeChangeListener.java
package com.example.anroidtestdemo;
public interface IModeChangeListener {
/**
* onModeChanged 跟UI说界面须要修改
* @param action 返回处理不一样UI的action
*/
public void onModeChanged(int action,Object... values);
}
MainActivity.java
package com.example.anroidtestdemo;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends BaseActivity {
private UserController mController;
public final static int LOGIN=1;
EditText userNameTv;
EditText passWordTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initController();
}
@Override
public void handlerMessage(Message msg){
if(msg.what==LOGIN){
//进行更改UI,作跳转
Log.i("620it","activity_login");
}
}
@Override
protected void initController() {
mController = new UserController(this);
//把当前的this 给UserController
mController.setIModeChangeListener(this);
}
//提交
public void submit(View view){
String userName = userNameTv.getText().toString();
String passWord = passWordTv.getText().toString();
//mController.sendAsyncMessage("login",userName,passWord);
//把数据提交给UserController 来处理
mController.sendAsyncMessage(LOGIN,userName,passWord);
}
//初始化UI
@Override
protected void initUI() {
userNameTv = (EditText)findViewById(R.id.userName);
passWordTv = (EditText)findViewById(R.id.passWord);
}
}
一个处理用户的信息的类UserController.java
package com.example.anroidtestdemo;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
public class UserController extends BaseController{
public UserController(Context c) {
super(c);
}
@Override
protected void handleMessage(int action, Object... values) {
String userName = (String) values[0];
String passWord = (String) values[1];
//表示登陆
if(action==MainActivity.LOGIN){
//表示登陆成功
if(!TextUtils.isEmpty(userName)&&!TextUtils.isEmpty(passWord)){
Log.i("620it","登陆成功告诉Activity");
//告诉Activity
mListener.onModeChanged(MainActivity.LOGIN,"sucess");
}
}
}
}
布局文件 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="用户名" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/userName"/> <TextView android:text="密码" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:password="true" android:id="@+id/passWord"/> <Button android:text="提交" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="submit" /> </LinearLayout> </RelativeLayout>