我正在做一个WeatherApp,不知道我在哪里可以把'AsyncTask‘代码放在这里。
这是我的第一个XmlPullParser代码,如果你知道如何解决它,请告诉我!
public class MainActivity extends ActionBarActivity {
getData getdata;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv= (TextView ) findViewById(R.id.tv);
getdata = (getData) new getData().execute(null, null, null);
}
public class getData extends AsyncTask<Void, Void, Void> {
boolean flag = false;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
}
@Override
protected void onCancelled(Void aVoid) {
super.onCancelled(aVoid);
}
@Override
protected Void doInBackground(Void... params) {
try{
URL url = new URL("http://www.kma.go.kr/weather/forecast/mid-term-rss3.jsp?stnId=109");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(true);
XmlPullParser parser = factory.newPullParser();
parser.setInput(url.openStream(), "utf-8");
String tag = null;
String city = null, mode = null, tmEf = null, wf = null, tmn = null, tmx = null, reliability = null;
int eventType = parser.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT) {
if(eventType == XmlPullParser.START_TAG) {
tag = parser.getName();
} else if (eventType == XmlPullParser.TEXT) {
if(tag.equals("mode")) {
mode = parser.getText();
} else if (tag.equals("tmEf")) {
tmEf = parser.getText();
} else if (tag.equals("wf")) {
wf = parser.getText();
} else if (tag.equals("tmn")) {
tmn = parser.getText();
} else if (tag.equals("tmx")) {
tmx = parser.getText();
} else if (tag.equals("reliability")) {
reliability = parser.getText();
} else if (tag.equals("city")) {
city = parser.getText();
}
} else if (eventType == XmlPullParser.END_TAG) {
tag = parser.getName();
if(tag.equals("location")) {
break;
}
} eventType = parser.next();
} flag = true;
}catch(Exception e) {
e.printStackTrace();
}
return null;
}
}发布于 2015-08-20 14:50:03
1)不要从小字符中给出名称-- getData不是java中类的好名称--它看起来像一种不像类类型的方法。好名字看起来应该是: GetDataAsync。
2)调用异步任务更好的地方是onResume()方法。
3)这里的getdata = (getData) new getData().execute(null, null, null);可能是一个问题--您可以尝试将空类型转换为getData类型
4)在onPostExecute中更新您的UI
5)也许doInBackground方法应该返回一些可用于onPostExecute方法的值
https://stackoverflow.com/questions/32121223
复制相似问题