2

我有一个扩展应用程序类的类,以在任何活动启动之前加载一些数据。我在那里做了一些 json 解析,但问题是在应用程序类中完成之前调用了活动类doInBackground,这就是为什么我第一次得到一个没有任何值的变量。这是我的代码,我需要它的解决方案,请帮助!

public class AppGlobalData extends Application {
    public ArrayList<YoutubeItem> gotItem = new ArrayList<YoutubeItem>();
    public YouTubeParser parser;

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();

        parser = new YouTubeParser(
                "http://powergroupbd.com/youtube/getyoutubejson.php");
        new ParserLoader().execute();

    }

    public class ParserLoader extends AsyncTask<Void, Void, Void> {

        @Override
        protected Void doInBackground(Void... params) {

            try {
                gotItem = parser.parseInitiator();
            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            return null;
        }
}

    public ArrayList<YoutubeItem> getGotItem() {
        return gotItem;
    }

    public void setGotItem(ArrayList<YoutubeItem> gotItem) {
        this.gotItem = gotItem;
    }

}

另一点是,如果我解析其中的数据,onCreate它可以在较低版本的 android 中工作,但在 ICS 中会导致网络主线程异常。

4

1 回答 1

-1

在处理或接收到数据之前,开始一个活动并尝试保持 onCreate 事件并不是一个好习惯。而是覆盖 AsyncTask 中的 onPostExecute 方法,该方法将在 doInBackground 完成后执行。

protected void onPostExecute(Void v) {
     // Add your code here !!!
 }

您在 ICS 上获得主线程异常的原因是您在主 UI 线程上运行了一些网络 API (YouTubeParser)。

试试这个。

Thread t = new Thread(new Runnable() {
 public void run() {
       parser = new YouTubeParser(
            "http://powergroupbd.com/youtube/getyoutubejson.php");
    new ParserLoader().execute();
 }
}
t.start();
于 2013-09-13T21:23:51.703 回答