当前位置:   article > 正文

andriod 回调传值_用最菜鸟的方式讲讲Android或者是Java中的回调传值

activity通过接口回调向java类传数据

先说说要实现的目标,说起来蛮奇葩,但是主要是为了搞懂这个回调传值的问题.我从MainActivity中启动了一个后台服务去网络上获取数据,如果获取到了就立马通知到MainActivity,然后做数据处理.这里你可以用别的对象,不一定非要是Service.

再说说个人的理解,之前一直很不理解这个回调回调到底是啥,一直被他的名字给搞晕了.在这个例子中,回调接口其实就是一个传递数据的工具而已,不要把他看作是接口(貌似我对接口二字有了恐惧感),好嘞,废话少说,开始

1.首先,你得有个接口,也就是传信的

接口可以定义在类的内部,也可以单独定义成一个类,都可以.我这里选择定义在类的内部

//定义在Service内部的一个接口,sendMessage就是我要传值的方法

public interface CallBack {

public void sendMessage(String msg);

}

然后在Service里声明一个全局的CallBack,是为了在获取到数据的地方能够用这个实例来调用sendMessage()方法

2.当然,你需要在Service中给CallBack传个引用

此时声明的CallBack是个没有声明的信使,你当然不能指望他来给你送信,所以,你需要在实现这个接口的地方来传一个CallBack的引用给他,然后给他赋个值,有了生命,他就可以帮你愉快的传值了

public GetDataService(Context context) {

super("HelloWorld");

this.mContext = context;

this.mCallBack = (CallBack) context;

}

贴一下我获取数据的方法:

public void getDataFromInternet() {

String url = "http://wthrcdn.etouch.cn/weather_mini?citykey=101200101";

RequestQueue queue = Volley.newRequestQueue(mContext);

StringRequest stringRequest = new StringRequest(Method.GET, url, new Listener() {

@Override

public void onResponse(String arg0) {

// TODO Auto-generated method stub

Log.d("onResponse", arg0);

mCallBack.sendMessage(arg0);//**在此处,用刚刚声明的callBack的实例来调用sendMessage方法,并将从网络中获取的数据放入到sendMessage的参数中.此时返回的数据就相当于在sendMessage这个信使里了**

}

}, new Response.ErrorListener() {

@Override

public void onErrorResponse(VolleyError arg0) {

// TODO Auto-generated method stub

}

}) {

@Override

protected Response parseNetworkResponse(NetworkResponse response) {

// TODO Auto-generated method stub

try {

String result = new String(response.data, "UTF-8");

return Response.success(result, HttpHeaderParser.parseCacheHeaders(response));

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return Response.error(new ParseError(e));

}

}

};

queue.add(stringRequest);

}

3.在你需要数据的地方来实现这个接口,也就是呼叫这个信使,问他要数据

我的目标就是在MainActivity里来获取这个数据,并进行显示,所以我的MainActivity需要implments这个CallBack

public class MainActivity extends BaseActivity implements CallBack//大声的呼叫信使!!把信给我!!

@Override

public void sendMessage(String msg) {

// TODO Auto-generated method stub

Log.d("MainActivity", msg);//此处的msg,就是我从后台获取到的数据了,随意使用吧~

}

好嘞,纠结很久的回调算是有点明白了,欢迎大家指正和拍砖~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/265071
推荐阅读
相关标签
  

闽ICP备14008679号