2017-04-11 6 views
-4

Ich habe einen On Long Click Listener auf eine Ansicht gesetzt, die einen Asyn Task startet, aber es stürzt ab. Ich habe auch einen On-Click-Listener auf der gleichen Ansicht und seine funktioniert ordnungsgemäß eingestellt. Mein Code ist wie folgt: private Ansicht minus Button;onLongClickListener stürzt ab

AsyncTask repeatDecrement; 
boolean minusIsPressed=false; 

    public void decrementValue() 
     { 
      int currentValue=Integer.valueOf(valueTextView.getText().toString()); 


    if(currentValue>this.minValue)valueTextView.setText(String.valueOf(currentValue-1));  
    } 
    minusButton.setOnLongClickListener(new OnLongClickListener() 
     { 
      @Override 
      public boolean onLongClick(View v) 
      { 
       minusIsPressed=true; 
       repeatDecrement=new repeatDecrement(ValueSelector.this); 
       repeatDecrement.execute(); 
       return false; 
      } 

     }); 

    public static class repeatDecrement extends AsyncTask<Void, Void, Void> 
     { 
     ValueSelector object; 

     public repeatDecrement(ValueSelector object) 
     { 
      this.object=object; 
     } 
     public void onPreExecute() 
     { 

     } 

     public Void doInBackground(Void...voids) 
     { 
      while(object.minusIsPressed) 
       publishProgress(); 
       SystemClock.sleep(500); 
      return null; 
     } 

     public void onProgressUpdate(Void...voids) 
     { 
      object.decrementValue(); 
     } 

     public void onPostExecute(Void unsused) 
     { 

     } 

    } 

Fehlerprotokoll unter:

04-11 12:16:14.480: E/AndroidRuntime(24372): FATAL EXCEPTION: AsyncTask #1 
04-11 12:16:14.480: E/AndroidRuntime(24372): java.lang.RuntimeException: An error occured while executing doInBackground() 
04-11 12:16:14.480: E/AndroidRuntime(24372): at android.os.AsyncTask$3.done(AsyncTask.java:278) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.lang.Thread.run(Thread.java:856) 
04-11 12:16:14.480: E/AndroidRuntime(24372): Caused by: java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.Void[] 
04-11 12:16:14.480: E/AndroidRuntime(24372): at com.example.customviewgood.ValueSelector$repeatIncrement.doInBackground(ValueSelector.java:1) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
04-11 12:16:14.480: E/AndroidRuntime(24372): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
04-11 12:16:14.480: E/AndroidRuntime(24372): ... 5 more 
04-11 12:16:15.430: D/OpenGLRenderer(24372): Flushing caches (mode 0) 
04-11 12:16:17.830: D/OpenGLRenderer(24372): Flushing caches (mode 2) 
04-11 12:16:17.900: D/OpenGLRenderer(24372): Flushing caches (mode 0) 
+0

schreiben Callstack – Vyacheslav

+2

könnten Sie das Fehlerprotokoll? –

+0

Post Fehlerprotokolle .. – FAT

Antwort

0

fand ich die Lösung. Ich habe festgestellt, dass ich mein AsyncTask-Objekt im onLongClick-Ereignis erstellt habe. Ich erstellte das Objekt in meiner benutzerdefinierten Ansicht Initializer und es funktionierte. Auch ich rief SystemClock.sleep() außerhalb der While-Schleife