一个好用的android网络通信机制

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_36500835/article/details/82423309

AsyCallbackListener.java

public class AsyCallbackListener
{
	public void run(Object result)
	{

	}

	public void error(Exception ex)
	{

	}
}

AsyExecuteListener.java

public class AsyExecuteListener
{
	public Object run() throws Exception
	{
		return null;
	}
}

AsyHelper.java

@SuppressLint("HandlerLeak")
public class AsyHelper
{
	private final int Error = -1;
	private final int Success = 0;

	private Thread thread;
	private AsyCallbackListener callback;
	private AsyExecuteListener exelistener;

	private Handler handler = new Handler()
	{
		@Override
		public void handleMessage(Message msg)
		{
			super.handleMessage(msg);

			if (msg.what == Success)
			{
				Object result = msg.obj;
				callback.run(result);
			} else
			{
				callback.error((Exception) msg.obj);
			}
		}
	};

	public void execute(AsyExecuteListener listener, AsyCallbackListener callback)
	{
		this.exelistener = listener;
		this.callback = callback;
		Runnable run = new Runnable()
		{
			@Override
			public void run()
			{
				try
				{
					Object result = exelistener.run();
					Message msg = new Message();
					msg.what = Success;
					msg.obj = result;
					handler.sendMessage(msg);
				} catch (Exception ex)
				{
					Message msg = new Message();
					msg.what = Error;
					msg.obj = ex;
					handler.sendMessage(msg);
				}
			}
		};
		thread = new Thread(run);
		thread.start();
	}

	public static void create(AsyExecuteListener listener, AsyCallbackListener callback)
	{
		AsyHelper asyHelper = new AsyHelper();
		asyHelper.execute(listener, callback);
	}
}

BaseActivity.java

public class BaseActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView();// 设置布局
        initControls();// 初始化控件
        setListener();// 设置控件监听
        loadParams();// 加载传递的参数
    }
    protected void setContentView() {}
    protected void initControls() {}
    protected void setListener() {}
    protected void loadParams() {}
    public void showLoading() {}
    public void closeLoading() {}
    
    public void runThreadAction() {
        AsyHelper.create(new AsyExecuteListener() {
                             public Object run() throws Exception {
                                 return runThreadActionExceute();
                             }

                         },

                new AsyCallbackListener() {
                    public void run(Object result) {
                        runThreadActionSuccess(result);
                    }

                    public void error(Exception ex) {
                        runThreadActionError(ex);
                    }
                });
    }
      protected Object runThreadActionExceute() {
        showLoading();
        return null;
    }

    protected void runThreadActionSuccess(Object result) {
        closeLoading();
    }

    protected void runThreadActionError(Exception ex) {
        closeLoading();
        ToastUtil.showToast(BaseActivity.this, ex.getMessage(), 3000);
    }

    public void runThreadAction(String actionName) {
        final String name = actionName;
        AsyHelper.create(new AsyExecuteListener() {
                             public Object run() throws Exception {
                                 return runThreadActionExceute(name);
                             }

                             ;
                         },

                new AsyCallbackListener() {
                    public void run(Object result) {
                        runThreadActionSuccess(name, result);
                    }


                    public void error(Exception ex) {
                        runThreadActionError(name, ex);
                    }
                });
    }

    protected Object runThreadActionExceute(String actionName) {
        showLoading();
        return null;
    }

    protected void runThreadActionSuccess(String actionName, Object result) {
        closeLoading();
    }

    protected void runThreadActionError(String actionName, Exception ex) {
        closeLoading();
        ToastUtil.showToast(BaseActivity.this, ex.getMessage(), 3000);
    }
    protected <T> T find(int resourceId) {
        return (T) findViewById(resourceId);
    }

MainActivity.java

public class MainActivityextends BaseActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        runThreadAction(); //调用
    }

    @Override
    protected void setContentView() {
        super.setContentView();
        setContentView(R.layout.main);
    }

    @Override
    protected void initControls() {
        super.initControls();
    }



    @Override
    protected void loadParams() {
        super.loadParams();
    }

    @Override
    protected void setListener() {
        super.setListener();
    }

    @Override
    public void runThreadAction() {
        super.runThreadAction();
    }

    @Override
    protected Object runThreadActionExceute() {
        super.runThreadActionExceute();
		//这里执行网络请求
		//返回请求回来的response -》runThreadActionSuccess()中
        return null;
    }

    @Override
    protected void runThreadActionSuccess( Object result) {
        super.runThreadActionSuccess( result);
       //请求成功,处理数据

    }

    @Override
    protected void runThreadActionError(, Exception ex) {
        super.runThreadActionError( ex);
         //请求失败
    }

猜你喜欢

转载自blog.csdn.net/qq_36500835/article/details/82423309