2016-03-27 27 views
-1

私はAsynctaskと仕事をしようとしていますが、毎回ステータスを取得していますが、常に実行中です。Asynctaskは決して完了しませんでした

私のコードで何が間違っていますか?これは私のasynctaskある

   LongOperation LongOperation = new LongOperation(finalLink[0], download_data); 
       LongOperation.execute(); 
       Toast.makeText(getApplicationContext(), LongOperation.getStatus().toString(), Toast.LENGTH_SHORT).show(); 

::これは私が私のasynctaskをロードする方法である

private class LongOperation extends AsyncTask<Void, Void, Void> { 
    public Download_data download_data; 
    public String link; 
    public boolean loading; 
    public LongOperation(String link, Download_data download_data){ 
     this.link = link; 
     this.download_data = download_data; 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 
     download_data.download_data_from_link(link); 
     return null; 
    } 

    protected void onPostExecute() { 
     finish(); 
    } 

    @Override 
    protected void onPreExecute() { 
     Toast.makeText(getApplicationContext(),"Executed.", Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    protected void onProgressUpdate(Void... values) { 
    } 
} 

答えて

1

あなたが右のそれを実行した後の状態をチェックしているので:

LongOperation.execute(); 
Toast.makeText(getApplicationContext(), LongOperation.getStatus().toString(), Toast.LENGTH_SHORT).show(); 

AsyncTask実行をバックグラウンドスレッド。したがって、​​コントロールを呼び出すと、すぐにToastと表示されます。そしてその時までには、taskはまだ動いています。

onPreExecuteの完了ステータスはAsyncTaskになります。あなたは、threadsについて混乱している場合には

@Override 
protected void onPostExecute(Void mVoid) { 
    Toast.makeText(getApplicationContext(), this.getStatus().toString(), Toast.LENGTH_SHORT).show(); 
    finish(); 
} 

は、これを読んで実行します。Java Multithreading

+0

これは、onPostExecuteは決して使用されないと言います。 – tokis

+0

@tokis、それは今動作しましたか? –

0

onPostExecute()の正しい署名は実際にあります。

protected void onPostExecute (Result result) 

あなたはAsyncTaskの1を上書きするが、別のオーバーロードを定義していないので、それ(およびその順番finish()には、呼び出されることはありません)。

署名を修正し、意図したとおりに完了する必要があります。

関連する問題