Android 接口回调机制应用

本文深入解析了Android回调机制,从View源码中点击事件的实现入手,详细讲解了接口回调的工作原理及应用场景,并通过AsyncHttpClient示例展示了如何在异步操作中使用接口回调获取结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  android回调机制的理解。第一次写技术博客。

 从View源码中的onclick事件入手:

 
1)系统声明接口,定义接口中的抽象方法。

    //这个是View的一个回调接口  
    /**  
    * Interface definition for a callback to be invoked when a view is clicked.  
    */  
    public interface OnClickListener {  
        /**  
         * Called when a view has been clicked.  
         *  
         * @param v The view that was clicked.  
         */  
        void onClick(View v);  
    }  

2.我们人为new 接口对象,重写点击方法

   button = (Button)findViewById(R.id.button1);  
   button.setOnClickListener(this);  
     @Override  
     public void onClick(View v) {  
          Toast.makeText(getApplication(), "OnClick", Toast.LENGTH_LONG).show();  
     }  


3)系统类 声明OnclickListener接口对象mOnclickListener,我们刚刚new的接口对象赋值到mOnclickListner,mOnclickListner调用我们重写的onClick方法

    /**  
    *  
    */  
    public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource {  
         /**  
         * Listener used to dispatch click events.  
         * This field should be made private, so it is hidden from the SDK.  
         * {@hide}  
         */  
        protected OnClickListener mOnClickListener;  
         
        /**  
         *  
         * Register a callback to be invoked when this view is clicked. If this view is not  
         * clickable, it becomes clickable.  
         *  
         * @param l The callback that will run  
         *  
         * @see #setClickable(boolean)  
         */  
         
        public void setOnClickListener(OnClickListener l) {  
            if (!isClickable()) {  
                setClickable(true);  
            }  
            mOnClickListener = l;  
        }  
         
         
        /**  
         * Call this view's OnClickListener, if it is defined.  
         *  
         * @return True there was an assigned OnClickListener that was called, false  
         *         otherwise is returned.  
         */  
        public boolean performClick() {  
            sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);  
      
            if (mOnClickListener != null) {  
                playSoundEffect(SoundEffectConstants.CLICK);  
                 
                mOnClickListener.onClick(this);  
                return true;  
            }  
      
            return false;  
        }  
    }  

接口回调机制应用场景:

AsyncHttpClient是异步的,但是有时候我们需要得到请求的结果集来返回给某个函数,由于是异步的,所以不能够直接return会去,所以可以定义一个interface来给调用AsyncHttpClient方法的一个回调来获取结果集,代码如下:

1)定义接口和接口方法,以及接口对象


    private static Callback mCallback;
        
        public interface Callback{
            abstract void rankingsResultData(JSONArray result,int code);
            abstract void postResultData(int result);
            abstract void shareResultData(int result);
        }

2)当post请求返回结果后,


    public static void getRankingList(int integType,int sortType,int size) {
            mClient.post(GET_RANKINGList, getRankingsParms(integType,sortType,size), new JsonHttpResponseHandler(){
                @Override
                public void onSuccess(JSONObject response) {
                    if (response != null) {
                        try {
                            JSONObject status = response.getJSONObject("state");
                            int code = status.getInt("code");
                            JSONArray list = null;
                            if (code == 0) {
                                list = response.getJSONArray("items");
                            }
                            if(mCallback != null){
                                mCallback.rankingsResultData(list,code);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                            if(mCallback != null){
                                mCallback.rankingsResultData(null,2);
                            }
                        }
                    }
                }

                public void onFailure(Throwable e, JSONObject errorResponse) {
                    if(mCallback != null){
                        mCallback.rankingsResultData(null,-1);
                    }
                }

                public void onFailure(Throwable error, String content) {
                    if(mCallback != null){
                        mCallback.rankingsResultData(null,-1);
                    }
                }            
            });        
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值