赞
踩
先说说要实现的目标,说起来蛮奇葩,但是主要是为了搞懂这个回调传值的问题.我从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,就是我从后台获取到的数据了,随意使用吧~
}
好嘞,纠结很久的回调算是有点明白了,欢迎大家指正和拍砖~
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。