首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AsyncTask和XmlPullParser

AsyncTask和XmlPullParser
EN

Stack Overflow用户
提问于 2015-08-20 14:39:24
回答 1查看 272关注 0票数 0

我正在做一个WeatherApp,不知道我在哪里可以把'AsyncTask‘代码放在这里。

这是我的第一个XmlPullParser代码,如果你知道如何解决它,请告诉我!

代码语言:javascript
复制
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;
    }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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方法的值

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32121223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档