-1

我想从异步类访问活动并设置文本。

public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Button getBtn = (Button) findViewById(R.id.btn_result);

        getBtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                           TextView txt_res = (TextView)findViewById(R.id.txt_Result);
                           new GetText(txt_res).execute(); // Async class
                }
        });
    }
}

//异步类

public class GetText AsyncTask<Void, Void, Void>{
    private TextView txt_res;

    public GetText (TextView txt_res) {
        this.txt_res = txt_res;
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
                     String Result = GetTextFromDb();
        } catch (Exception e) {

        }
        return null;
    }

     @Override
 protected void onPostExecute(Void result)
    {
        try
        {
            Log.v("Success", "Success"); // I see "Success" at Logcat
            txt_res.SetText("Success"); // Textview didn't change
        }catch (Exception e) {
            Log.v("Error", e.getMessage()); // No error at Logcat

        }
    }
}

我重新定义了我的问题。文本视图不会改变。我的错误是什么。

我再次重新定义我的问题。Textview 在两个函数(doInBackground、onPostExecute)上没有改变

4

1 回答 1

1

你基本上有2个选择。显然,您不能直接从 asych 访问主线程,因此您必须使用正确的格式。

  1. 如果任务完成后需要更新文本视图,只需在onPostExecute中进行更新

  2. 如果 textview 正在显示一些中间进度,请使用onProgressUpdate

编辑:

好的,现在这是您的问题。对于 asycn 任务,您必须从 doInBackground 返回一个值。将类型更改为字符串,并更改 onPostExecute(String result)。Void 意味着你什么也没有返回。您还必须将异步任务顶部的三个参数中的第二个更改为字符串。

另外,方法是 textview.setText(""); 不是 textview.SetText("")。后者不应该编译

于 2012-11-25T02:32:19.787 回答