2015-10-11 4 views
0

Я использую AsynchTask в своем приложении, чтобы сохранить запись на сервере.Android AsynchTask в линейной компоновке - метод должен вызываться из пользовательского интерфейса Thread

Метод, который я использую в моей doInBackground ничего не делать вообще с UI, но я получаю следующее сообщение об ошибке

Метод tryThis должен вызываться из потока пользовательского интерфейса, в данный момент выводится нить рабочий

Как я уже сказал, ничего не происходит, что связано с пользовательским интерфейсом. Таким образом, я отключил свой код, чтобы попытаться определить проблему, и теперь она почти не годится. См. Ниже

Вы заметите, что вместо кода AsynchTask, находящегося в расширении Activity, он находится в расширении LinearLayout, поскольку я использую это для пользовательского представления. Я сильно подозреваю, что именно здесь лежит корень проблемы, но я не понимаю, почему и не знаю, как обойти это.

public class ExerciseView extends LinearLayout { 

    public ExerciseView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    private class saveRecordTask extends AsyncTask<String, String, String> { 



     @Override 
     protected String doInBackground(String... params) { 

      String returnString = ""; 

      try { 
       returnString = tryThis(); 
       // 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      return returnString; 
     } 


     @Override 
     protected void onPostExecute(String result) { 


     } 


     @Override 
     protected void onPreExecute() { 
      //startProgress(); 
     } 


     @Override 
     protected void onProgressUpdate(String... text) { 
      // Things to be done while execution of long running operation is in 
      // progress. For example updating ProgessDialog 
     } 
    } 

    public String tryThis() { 
     String hi = "hi"; 
     return hi; 
    } 

} 

Я предполагаю, что я мог бы использовать интерфейс в настраиваемое представление, чтобы дать данные на активность в нужное время, а затем сделать AsynchTask в деятельности, но я бы очень хотел, чтобы держать все вместе в обычае чтобы минимизировать количество кода, которое нужно записать каждый раз, когда я его использую.

+0

ли этот код все еще выдаст сообщение об ошибке? –

+0

Просьба отправить полный стек и фрагмент, в котором выполняется AsyncTask. –

+0

@MikeM. Эта ошибка возникает в Android Studio, поэтому я не дошел до ее компиляции или даже записал ее. – 365SplendidSuns

ответ

-1

Попробуйте это. Это поможет. Если вы хотите вызвать tryThis() внутри пользовательского интерфейса нити называют его следующим

runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     tryThis(); 
    } 
}); 
+0

Я не хочу запускать его внутри потока пользовательского интерфейса. Нет необходимости запускать его в потоке пользовательского интерфейса. Я хочу, чтобы он работал в моем doInBackground() – 365SplendidSuns

+0

Если система сообщает вам, что метод должен вызываться из потока пользовательского интерфейса, тогда он должен. Ваше мнение о том, является ли пользовательский интерфейс, не имеет значения. – nasch

Смежные вопросы