Java 得到一个奇怪的;只有创建视图层次结构的原始线程才能接触其视图。”;我的android天气应用程序出错

Java 得到一个奇怪的;只有创建视图层次结构的原始线程才能接触其视图。”;我的android天气应用程序出错,java,android,Java,Android,我正在使用以下代码刷新手机屏幕上的天气信息,前2-3次效果很好,但之后它开始崩溃,并给我这个错误 代码如下: package com.example.ma18uus.myapplication; 导入android.os.AsyncTask; 导入android.support.v7.app.AppActivity; 导入android.os.Bundle; 导入android.widget.TextView; 导入org.xmlpull.v1.XmlPullParser; 导入org.xmlp

我正在使用以下代码刷新手机屏幕上的天气信息,前2-3次效果很好,但之后它开始崩溃,并给我这个错误

代码如下:

package com.example.ma18uus.myapplication;
导入android.os.AsyncTask;
导入android.support.v7.app.AppActivity;
导入android.os.Bundle;
导入android.widget.TextView;
导入org.xmlpull.v1.XmlPullParser;
导入org.xmlpull.v1.XmlPullParserException;
导入org.xmlpull.v1.XmlPullParserFactory;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.HashMap;
公共类weatherView扩展了AppCompative活动{
//主url
静态最终字符串main_url=”http://api.weatherapi.com/v1/";
//实时或每周预测
静态最终字符串live_weather=“current.xml?key=”;
//字符串sevendays_weather=“orecast.xml?key=”;
//API密钥+q
静态最终字符串API_Key=“C3BDFADB90D5452BB800331821801&q=”;
//位置设定器
静态最终字符串位置=“伦敦”;
//今天预测的完整url
静态最终字符串URLT=主url+实时天气+API\U键+位置;
//XML节点密钥
静态最终字符串KEY\u ITEM=“root”//父节点
静态最终字符串KEY_NAME=“NAME”//城市名称,字符串
静态最终字符串键\u WIND\u MPH=“WIND\u MPH”//WIND MPH,float
静态最终字符串键\u WIND\u KPH=“WIND\u KPH”;//WIND KPH,float
静态最终字符串键\u C=“temp\u C”//温度摄氏度,int
静态最终字符串键\u C\u FEELS=“feelslike\u C”//温度感觉摄氏度,浮动
静态最终字符串键\u F=“temp\u F”//温度华氏度,整数
静态最终字符串键\u F\u FEELS=“feelslike\u F”//温度感觉华氏温度,浮动
静态最终字符串键\u湿度=“湿度”//湿度级别,int
静态最终字符串键\u CONDITION\u TEXT=“TEXT”//天气条件,即多云、晴朗、晴朗、字符串
ArrayList菜单项;
私有文本视图;
字符串xml;
//@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u weather\u视图);
menuItems=newarraylist();
txt=(TextView)findViewById(R.id.weather\u窗口);
新建weatherTask().execute();
//parseXML();
}
私有类weatherTask扩展了AsyncTask{
@凌驾
受保护的空位背景(空位…空位){
parseXML();
返回null;
}
私有void parseXML(){
XmlPullParserFactory parserFactory;
试一试{
parserFactory=XmlPullParserFactory.newInstance();
XmlPullParser=parserFactory.newPullParser();
试一试{
InputStream is=新URL(URLT).openStream();
setFeature(XmlPullParser.FEATURE_进程_名称空间,false);
setInput(is,null);
进程解析(解析器);
}捕获(IOE异常){
e、 printStackTrace();
}
}catch(XMLPullParseRexE){
e、 printStackTrace();
}
}
私有void processParsing(XmlPullParser解析器)抛出IOException、XmlPullParserException{
ArrayList weather=新建ArrayList();
int eventType=parser.getEventType();
WeatherConditions currentWeather=null;
while(eventType!=XmlPullParser.END_文档){
字符串sName=null;
开关(事件类型){
case XmlPullParser.START_标记:
sName=parser.getName();
如果(“根”。等于(sName)){
currentWeather=新的天气条件();
天气。添加(当前天气);
}否则如果(currentWeather!=null){
如果(“名称”。等于(sName)){
currentWeather.name=parser.nextText();
}
否则,如果(“风速”等于(sName)){
currentWeather.wind_mph=parser.nextText();
}否则,如果(“风速度”等于(sName)){
currentWeather.wind_kph=parser.nextText();
}else如果(“temp_c.”等于(sName)){
currentWeather.celsius=parser.nextText();
}否则如果(“feelsciences.”等于(sName)){
currentWeather.feelsciences=parser.nextText();
}else如果(“华氏”。等于(sName)){
currentWeather.fahrenheit=parser.nextText();
}else如果(“feelsfhrenheit.”等于(sName)){
currentWeather.feelsFahrenheit=parser.nextText();
}否则,如果(“湿度”。等于(sName)){
currentWeather.湿度=parser.nextText();
}else if(“text.”等于(sName)){
currentWeather.condition_text=parser.nextText();
}
}
打破
}
eventType=parser.next();
}
印刷天气(天气);
}
私人空间打印天气(ArrayList天气){
StringBuilder=新的StringBuilder();
用于(天气条件天气C:天气){
建筑商.append(weatherC.name).append(“\n”).append(weatherC.wind\u mph).append(“\n”).append(weatherC.wind\u kph).append(“\n”).append(w