写了个Demo用于测试Afinal框架的get方法,然而一直出错,没有任何错误提示,程序就是直接关闭了。
部分代码如下:
其中str为String类型的私有成员变量
public String getString(String url){
Log.d("GetString","GetString.getString is started");
FinalHttp fh = new FinalHttp();
fh.get(url, new AjaxCallBack<Object>() {
@Override
public void onFailure(Throwable t, int errorNo, String strMsg) {
// TODO Auto-generated method stub
// Log.d("onFailure",strMsg);
super.onFailure(t, errorNo, strMsg);
Log.d("GetString","GetString.getString is falure");
}
@Override
public void onSuccess(Object t) {
// TODO Auto-generated method stub
// Log.d("onSuccess","successed");
super.onSuccess(t);
str = t.toString();
Log.d("GetString","str is:"+str);
// tvTest.setText(str);
}
});
return str;
}
最后的解决办不法是,不要用return的str,而把一些代码放在onSuccess里面实现,即不能把数据这么简单的返回回来。如果在外部使用str,则会出错。使用handler方法把str传递出来就不清楚了。
不只Afinal是这样,使用其它库也是一样,具体原因不明,求大神解答。
解答:
使用handler可以实现。
估计主要是所有Afinal这些操作都牵涉到异步任务,直接修改私有变量会出现很多问题,你不知道什么时候网络请求成功修改私有变量,什么时候还在请求当中。
一般的做法即是使用Handler使出来使用。
当然在OnSuccess里显然是可以用的。