0

あなたの助けとハッピークリスマスに感謝します。

Ok。

これで、次のクラスができました。これは、インターネットからデータを取得するために、メインのアクティビティでインスタンス化します。

ご覧のとおり、クラスにはインターネットからのデータ収集を実行するAsyncTaskが含まれています。

アクティビティが一時停止されたら(エミュレータの[戻る]ボタンを使用)、AsyncTaskを停止します。

それでも、AsyncTaskがインターネットからデータをフェッチしようとし続けているため、LogCatはメッセージを表示し続けます。

これがLogCatです、止まることはありません...

12-24 09:36:48.806: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.816: E/grabXML(698): Exception fetching data
12-24 09:36:48.816: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.836: E/grabXML(698): Exception fetching data
12-24 09:36:48.836: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.846: E/grabXML(698): Exception fetching data
12-24 09:36:48.846: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.856: E/grabXML(698): Exception fetching data
12-24 09:36:48.856: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.966: E/grabXML(698): Exception fetching data
12-24 09:36:48.966: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.
12-24 09:36:48.996: E/grabXML(698): Exception fetching data
12-24 09:36:48.996: E/grabXML(698): java.lang.IllegalStateException: Manager is shut   down.
12-24 09:36:49.037: E/grabXML(698): Exception fetching data
12-24 09:36:49.037: E/grabXML(698): java.lang.IllegalStateException: Manager is shut down.

これが私のクラスです

public class Grab{
    public String url;
    public String srt = "cav";
    public boolean flag = false;
    public GrabXml g;
    public Grab (String u){
        url = u;
    } 

    public String vai(){
        g = new GrabXml();
        g.execute();
        Log.e("", srt);
        while(!flag){
            // nothing
        };
        g.cancel(true);
        return srt;
    }

    public void fermaGrab() {
        g.cancel(true); 
    }

    public class GrabXml extends AsyncTask<Void, String, Void>{
        @Override
        protected Void doInBackground(Void... arg0) {
            Log.e("", "arrivo al do in background");
            Log.e("", url);
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet getMethod = new HttpGet(url);
            try {
                ResponseHandler<String> responseHandler = new BasicResponseHandler();
                srt = client.execute(getMethod, responseHandler);
                Log.e("", "passo per GrabXML");
            }
            catch (Throwable t) {
                android.util.Log.e("grabXML", "Exception fetching data", t);
            }
            flag = true;
            client.getConnectionManager().shutdown();
            return null;
        }

        @Override
        protected void onProgressUpdate(String... item) {
            // nothing
        }

        @Override
        protected void onPostExecute(Void unused) {
            flag = true;      
        }
    }
}
4

2 に答える 2

1

下の線の内側の問題だと思います

       client.getConnectionManager().shutdown();

あなたはあなたのソリューションのより多くの説明を見つけるでしょう

これは、理解を深めるのにも役立つオリジナルのApacheドキュメントです。

それが役立つことを願っています:)

于 2012-12-24T10:24:36.257 に答える
1

謎の解決策を見つけました:アクティビティが破棄された後もメッセージを受信し続けるを参照してください

サービスは実際には適切に強制終了されていました。

重要なのは、サービスには無限ループが含まれており、サービスがキャンセル/破棄されてもループが続くということです。

みなさん、メリークリスマス!!

于 2012-12-24T13:17:00.310 に答える