2

Application クラスを拡張して、アクティビティが起動する前にデータをロードするクラスがあります。そこで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 イベントを保持することはお勧めできません。代わりに、doInBackground の終了後に実行される AsyncTask の onPostExecute メソッドをオーバーライドします。

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 に答える