android 回调函数的使用

// activity 之间方法调用的桥梁

public class ActivityCallBridge {

    static ActivityCallBridge mBridge;

    private OnMethodCallback mCallback;

    private ActivityCallBridge() {

    }

    public static ActivityCallBridge getInstance() {

        if (mBridge == null) {

            mBridge = new ActivityCallBridge();

        }

        return mBridge;

    }

    public void invokeMethod() {

        if (mCallback != null) {

            mCallback.doMethod();

        }

    }

    public void setOnMethodCallback(OnMethodCallback callback) {

        mCallback = callback;

    }

    public static interface OnMethodCallback {

        public void doMethod();

    }

}

 

如果你要 B 去调用 A 的一个方法, 你可以让 A 实现 OnMethodCallback 接口,然后在 B 里面调用 invokeMethod 方法来完成回调:

 

// A 实现调用接口

public class AActivity extends Activity implements ActivityCallBridge.OnMethodCallback {

    private ActivityCallBridge mBridge;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mBridge = ActivityCallBridge.getInstance();

        mBridge.setOnMethodCallback(this);

    }

    @Override

    public void doMethod() {

    }

}

 

  

//B 调用接口

public class BActivity extends Activity {

    private ActivityCallBridge mBridge;

    /** Called when the activity is first created. */

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mBridge = ActivityCallBridge.getInstance();

        mBridge.invokeMethod();

    }

}

方式一结束

 ——————————————————————————————————————————————————————————————————————————————————————————

                               回调方式二:

复制内容到剪贴板
代码:
package pattern;

/**
*
@author xuzhiwei
*/
public interface ICallBack {
    public void onSuccess(String content);
    public void onFailure(String errorMsg);
}
复制内容到剪贴板
代码:
package pattern;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
@author xuzhiwei
*/
public abstract class Request { 
    public void onSuccess(String resposeBody){}
    public void onFailure(String exceptionMsg){}
    
    public Request(){}
    
    public void execute(String path){
        try {
            URL url = new URL(path);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            
            conn.setConnectTimeout(3*1000);
            conn.setReadTimeout(2000);
            int responseCode =  conn.getResponseCode();
            onResponse(responseCode);
        } catch (MalformedURLException ex) {
            onFailure(ex.getMessage()); 
        } catch (IOException ex) {
           onFailure(ex.getMessage()); 
        } 
    }
    
    public void onResponse(int code){ 
        if(code == 200){
            onSuccess("发送请求成功!");
        }else{
            onFailure("发送请求失败!请求代码:"+code);
        }
    }
     
}
复制内容到剪贴板
代码:
package pattern;

/**
*
@author xuzhiwei
*/
public class Ranking {
    private  String path;
    
    public Ranking(String path){
        this.path = path;
    } 
    
    public  void list(final ICallBack call) { 
        
        Request request = new Request() {
            @Override
            public void onSuccess(String resposeBody) {
                if (null != call) {
                    call.onSuccess(resposeBody);
                } else {
                    onFailure("未初始化回调函数");
                }
            }

            @Override
            public void onFailure(String exceptionMsg) {
                if (null != call) {
                    call.onFailure(exceptionMsg);
                }
            }
        };

        request.execute(path);
    }
}
复制内容到剪贴板
代码:
package pattern; 
/**
*
@author xuzhiwei
*/
public class TestCallBack {

    public static void main(String[] args) {
        
        Ranking ranking = new Ranking("http://localhost/net/index.php");
        
        ranking.list(new ICallBack() {

            @Override
            public void onSuccess(String content) {
               complete(content);
            }

            @Override
            public void onFailure(String errorMsg) {
                complete(errorMsg);
            }
        });
    }
    
    private static void complete(String msg)
    {
        System.out.println("------请求完成---->"+msg);
    }
}
原文地址:https://www.cnblogs.com/laughingQing/p/4554046.html