2016-03-19 13 views
-1

私のアプリで簡単なアニメーションを行うにはASyncTaskを使用しています。しかし、それはちょうどクラッシュし、私は間違ったスレッドからUIを編集すると言う以下、Android 5.0以上で動作します。ここに私のコードは次のとおりです。Android ASyncTask Android 4以降でクラッシュする

private class AlphaCorrect extends AsyncTask<Integer, Integer, Integer> { 
    float alpha; 
    @Override 
    protected Integer doInBackground(Integer[] params) { 
     Log.i("back","running"); 
     for (float i = 0.0f; i < 0.9; i += 0.02) { 
      alpha = i; 
      try { 
       Thread.sleep(10); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      Update(); 
     } 
     try { 
      Thread.sleep(100); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     for (float i = 0.8f; i > -0.1f; i -= 0.02) { 
      alpha = i; 
      try { 
       Thread.sleep(10); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      Update(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPreExecute() { 
     Log.i("run", "RUN"); 
     canClick = false; 
    } 

    @Override 
    protected void onPostExecute(Integer result) { 
     canClick = true; 
    } 

    protected void Update() { 
     correct.setAlpha(alpha); 
    } 
} 

私はすでに、Runnableを試しThreadといくつかの他のもの。何か案は?

+0

logcatお願いしますか?正確なエラーメッセージを表示します。 –

+0

Android 5.0以上でどのように動作したのだろうか。実際には、main以外のスレッドからUIを使って何もすることはできません。 *メインスレッド*にRunnableをポストするだけで(システムがコールバックを提供しない場合)、UIを更新する必要があるときはいつでも。 – frangulyan

答えて

1

あなたはまさにエラーが言っていることを行います。あなたは別のスレッドからUIを更新します。 onProgressUpdateのAsyncTaskメソッドをオーバーライドし、その内部にUpdate()を置き、doInBackgroundメソッドでpublishProgress(0)を呼び出します。

+0

私はそれをしていた、それは同じだった。同じエラーメッセージ。 – BeefEX

0

asynctaskのバックグラウンドでdoのアクティビティを編集することはできません。なぜこのエラーが発生しているのですか? doinbackgroundから編集できる値は、ローカルのverablesとグローバルなveriablesです。

doInBackground()からuiを編集することはできません。

sloutionはonProgressUpdate()を使用し、onpogressupdate()でuiの変更を行います。

これがあなたの望むものかどうか教えてください。

0

あなたのUpdate()で何も更新できない場合は、onProgressUpdate()を使用する必要があります。このメソッドはAsynTaskによって提供されます。

関連する問題