线性布局中的Android AsynchTask - 必须从UI线程调用方法

时间:2015-10-11 08:55:48

标签: android android-asynctask

我在我的应用程序中使用AsynchTask将记录保存到服务器。

我在doInBackground中使用的方法对UI没有任何作用,但是我收到以下错误

方法tryThis必须从UI线程调用,当前推断的线程是worker

就像我说没有发生任何涉及UI的事情。所以我已经剥离了我的代码以试图找出问题,现在它已经非常裸了......见下文

您会注意到,而不是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;
    }

}

我想我可以在自定义视图中使用接口在适当的时间将数据提供给Activity,然后在Activity中执行AsynchTask但我真的想在自定义视图中将所有内容保存在一起以最小化每次使用时都需要写入的代码量。

1 个答案:

答案 0 :(得分:-1)

试试这个。这会有所帮助。 如果你想在UI线程中调用tryThis(),请将其调用如下

runOnUiThread(new Runnable() {

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