3

以前はthis errorに入っていましたが、厳密モードシステムでは間違いだと思っていました。しかし、それは明らかに私が悲しんで今見出した通りです。 。Android Honeycomb:フラグメントがAsyncTaskを開始できませんか?

public void startURLRequest(Fragment target, String url, String message) 
{ 

    if (asyncTask != null) asyncTask.cancel(true); 
    asyncTask = new FragmentHttpHelper(url, message, target); 
    asyncTask.doInBackground(); 

    return; 
} 

FragmentHttpHelperはAsyncTaskから派生したカスタム内部クラスです::(

は私のプログラムの開発が一つの活性およびフラグメントの負荷で作られ

私はこのようなURL要求を開始しNetworkWorkerフラグメントを、持っています私は2.2のアプリでそれを使用する場合

private class FragmentHttpHelper extends AsyncTask<Void, Void, String> 
{ 
    //... 

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

     if (CheckInternet()) 
     { 
      try 
      { 
       URL myURL = new URL(url); 
       httpClient = new DefaultHttpClient(); 

       if (this.message == null) 
       { 
        httpRequest = new HttpGet(myURL.toExternalForm()); 
       } 
       else 
       { 
        httpRequest = new HttpPost(myURL.toExternalForm()); 

        HttpEntity myEntity = new StringEntity(message, "UTF-8"); 
        ((HttpPost) httpRequest).setEntity(myEntity); 
       } 

       // and so on... 
      } 
      //catches 
      finally 
      { 
       // auf jeden Fall Verbindung beenden 
       if (httpRequest != null) httpRequest.abort(); 
       // if (httpClient != null) httpClient.close(); 
      } 

     } 
     else 
     { 
      showDialog(getString(R.string.net_notify_no_network), target); 
     } 

     //... 
    } 

    /** 
    * gets called after AsyncTask has finished 
    */ 
    protected void onPostExecute(String result) 
    { 

     if (target == null) 
     { 
      ((NetworkWorkerListener) getActivity()).onDownloadHasFinished((!result.contentEquals(ERROR)), result); 
     } 
     else 
     { 
      ((NetworkWorkerListener) target).onDownloadHasFinished((!result.contentEquals(ERROR)), result); 
     } 
    } 

} 

NetworkWorkerListenerは、URL要求を開始した断片上のコールバックのためだけのインタフェースである。このクラスは、常にうまく働いています。私はその後、私の活動でそれを引き出すでしょう。

メニュー項目が選択されている場合

は今、別のワーカーフラグメントは、上記の方法を介したURLリクエストを開始し、読み込みダイアログを開きます。

FragmentManager fragmentManager = getFragmentManager(); 

NetworkWorker network = (NetworkWorker) fragmentManager.findFragmentByTag(TabletMain.NETWORK); 
if (network == null) return WorkerFeedback.NO_NETWORK_WORKER; 

myDialog = LoadingDialog.createInstance(getString(R.string.notify_download), this); 
myDialog.show(fragmentManager, TabletMain.ONETIME); 

network.startURLRequest(this, someurl, null); 

少なくともそれが起こることになって何。 代わりに、メニュー項目をクリックすると、アプリがフリーズし、読み込みダイアログが表示されなくなります。次に起こるのは、ダウンロードの終わり(または、私の場合はエラーメッセージ、ナンセンス文字列を送信している)への反応です。意味onPostExecute()に達しました。

私は今、本当に立ち往生しています - AsyncTask with Fragmentsを使用することはできませんか?それとも私は何か悪いことをしましたか?あなたの助けのための

おかげで、 クラゲ

+0

(非同期タスクに)代わりにexecuteを呼び出し、直接doInBackgroundを呼び出さないでください。あなたはログ猫の出力を確認しましたか? – Flo

+0

ログに自分自身を捕まえて印刷する例外があります。 – jellyfish

答えて

7

+1

おお、私はとても愚かです、ありがとう!私のスマートフォンアプリを詳しく見ていたはずです。 ;) – jellyfish

関連する問題