关于Http网络请求一直出错的问题

文章讨论了在使用Afinal框架和其他库进行异步操作时,直接修改私有变量可能导致的问题,并提供了使用Handler解决该问题的方法。通过在onSuccess方法内处理数据,避免了直接修改私有变量带来的不确定性。

写了个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里显然是可以用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值