2016-02-25 6 views
0

я пишу сильфон кода в AsyncTask, но получить мне ошибку и сказать:метод getCheckedRadioButtonId должен вызываться из потока пользовательского интерфейса Android?

* Метод getCheckedRadioButtonId должен вызываться из пользовательского интерфейса нити **

new AsyncTask<Void,Void,String>(){ 

     @Override 
     protected String doInBackground(Void... params) { 
      long result = 0; 
      long t = System.currentTimeMillis(); 
    HERE---->switch (StartActivity.this.RadioType.getCheckedRadioButtonId()){ 
       case R.id.radioFibJR: 
        result = FibLib.fibJR(n); 
        break; 
       case R.id.radioFibJI: 
        result = FibLib.fibJI(n); 
        break; 
       case R.id.radioFibNR: 
        result = FibLib.fibNR(n); 
        break; 
       case R.id.radioFibNI: 
        result = FibLib.fibNI(n); 
        break; 
      } 
      t = System.currentTimeMillis() - t; 

     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
     } 
    }.execute(); 
+0

сделать это, как сказал DroidHacker, но если Вы должны получить состояние обязательно в doInBackground (по любой причине), Вы можете использовать runOnUiThread() – Opiatefuchs

+0

Hmmmmmmmmmmmmm. –

+0

hmmmmmmmmmmmmm? – Opiatefuchs

ответ

2

Просто поместите этот код вне AsyncTask. Это трюк. ура :)

int id=StartActivity.this.RadioType.getCheckedRadioButtonId(); 
new AsyncTask<Void,Void,String>(){ 

     @Override 
     protected String doInBackground(Void... params) { 
      long result = 0; 
      long t = System.currentTimeMillis(); 
      switch (id){ 
       case R.id.radioFibJR: 
        result = FibLib.fibJR(n); 
        break; 
       case R.id.radioFibJI: 
        result = FibLib.fibJI(n); 
        break; 
       case R.id.radioFibNR: 
        result = FibLib.fibNR(n); 
        break; 
       case R.id.radioFibNI: 
        result = FibLib.fibNI(n); 
        break; 
      } 
      t = System.currentTimeMillis() - t; 

     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
     } 
    }.execute();