2016-03-19 13 views
-1

Ich verwende , um einfache Animation in meiner App zu tun. Aber es funktioniert nur auf Android 5.0+, darunter stürzt es einfach ab und sagt, dass ich UI aus dem falschen Thread bearbeite. Hier ist mein Code:Android ASyncTask Absturz auf Android 4 und niedriger

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); 
    } 
} 

Ich versuchte Runnable, Thread und einige andere Dinge schon. Irgendwelche Ideen?

+0

logcat bitte? genaue Fehlermeldung anzeigen –

+0

Ich frage mich, wie es bei Android 5.0 + funktioniert. Sie dürfen tatsächlich nichts mit UI von einem anderen Thread als main aus tun. Wann immer Sie die UI aktualisieren müssen, geben Sie einfach einen Runnable auf * main thread * ein (wenn das System keinen Rückruf für Sie bereitstellt). – frangulyan

Antwort

1

Sie tun genau das, was der Fehler sagt - Sie aktualisieren UI von einem anderen Thread. Außer Kraft setzt onProgressUpdate Methode der AsyncTask, setzten Update() hinein und rufen publishProgress(0) in Ihrer doInBackground Methode

+0

Ich machte das und es war das gleiche. Gleiche Fehlermeldung. – BeefEX

0

Sie keine ui der Aktivität von dem Do im Hintergrund jeden AsyncTask bearbeiten können. Deshalb erhalten Sie diesen Fehler. Die Werte, die Sie vom doinbackground aus bearbeiten können, sind lokale Verben und globale Veriable.

Sie können die UI nicht von doInBackground() bearbeiten.

die Lösung wäre onProgressUpdate() zu verwenden und die Änderungen in der onpogressupdate() zu tun.

lassen Sie mich wissen, wenn dies das ist, was Sie wollen.

0

es einfach wie ihr say.you kann nichts in Ihrem Update() aktualisieren, sollten Sie die onProgressUpdate() verwenden, diese Methode von AsynTask zur Verfügung gestellt.