Java Can';t在未调用Looper.prepare()的线程内创建处理程序
我正在使用AsyncTask调用YahooWeatherAPI。代码如下: } 调试代码后,我发现yahooAPI调用成功,我可以在Java Can';t在未调用Looper.prepare()的线程内创建处理程序,java,android,android-asynctask,Java,Android,Android Asynctask,我正在使用AsyncTask调用YahooWeatherAPI。代码如下: } 调试代码后,我发现yahooAPI调用成功,我可以在queryyahowather函数中看到XML响应。但一旦此函数的执行完成,就会引发异常: 无法在未调用Looper.prepare()的线程内创建处理程序。 请帮助我。从queryyahoweather方法中删除所有Toast,因为此方法是从AsyncTask的doInBackground(Object…params)调用的,并且您不能从后台线程访问Toast
queryyahowather
函数中看到XML响应。但一旦此函数的执行完成,就会引发异常:
无法在未调用Looper.prepare()的线程内创建处理程序。
请帮助我。从
queryyahoweather
方法中删除所有Toast,因为此方法是从AsyncTask
的doInBackground(Object…params)
调用的,并且您不能从后台线程访问Toast(也是一个Ui元素)之类的Ui元素
注意:如果您想知道背景中发生了什么,请使用而不是Toast's
编辑:
将doInBackground更改为:
@Override
protected String doInBackground(Object... params) {
// TODO Auto-generated method stub
String strresult="";
try {
Log.i("my label", "entering in doInBackground");
Log.i("params[0]", params[0].toString());
strresult= QueryYahooWeather(params[0].toString());
Log.i("strresult result ::: ", strresult);
} catch (Exception e) {
Log.i("my label", e.toString());
return null;
}
return strresult;
}
你在打电话吗
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
.show();
在queryyahoweather
中,它正在doInBackground
中调用
您不能从后台线程调用
UI
调用。谢谢您的回复。通过从该函数中删除祝酒词,错误消失了。但从queryyahoweather
返回后,其结果不会返回,而是在doInBackground方法中返回null值。有什么想法吗?@NidaSulheri:put a loglog.v(标记“queryyahoweather::”+qResult)代码>前返回qResult在queryyahoweather
中选择code>并检查您是否在qResult中获得值我在调试中选择了qResult
,它包含了整个结果XML响应。我想您还可以将受保护对象doInBackground(Object…params)
的返回类型更改为受保护字符串doInBackground(Object…params)
我已将doInBackground的返回类型更改为String,但仍然返回null值:(感谢您的响应。通过从该函数中删除toast,错误已经消失。但是从queryyahowear返回后,其结果不会返回,而是在doInBackground方法中返回null值。有什么想法吗?
Toast.makeText(getBaseContext(), e.toString(), Toast.LENGTH_LONG)
.show();