Android 对长时间方法使用处理程序

Android 对长时间方法使用处理程序,android,Android,在执行搜索时,我使用处理程序使UI响应。我使用了Handler,但为什么它仍然显示错误“只有创建视图层次结构的原始线程才能接触其视图” 编辑:我遵循了。问题在于搜索词中的这一行: resultTextView.setText(result); 它需要在UI线程上执行,但正在搜索线程中运行。替换为: searchHandler.post(new Runnable() { @Override public void run() { resultTextView.se

在执行搜索时,我使用处理程序使UI响应。我使用了Handler,但为什么它仍然显示错误“只有创建视图层次结构的原始线程才能接触其视图”


编辑:我遵循了。

问题在于
搜索词中的这一行:

resultTextView.setText(result);
它需要在UI线程上执行,但正在搜索线程中运行。替换为:

searchHandler.post(new Runnable() {
    @Override
    public void run() {
        resultTextView.setText(result);
    }
});

问题在于
搜索词中的这一行:

resultTextView.setText(result);
它需要在UI线程上执行,但正在搜索线程中运行。替换为:

searchHandler.post(new Runnable() {
    @Override
    public void run() {
        resultTextView.setText(result);
    }
});

searchWord方法的问题在于它仍然从另一个线程更新UI,请尝试将代码保留在处理程序中

private final Handler searchHandler = new Handler() {
    @Override
    public void handleMessage(final Message msg) {
        super.handleMessage(msg);
//call searchWord method from here depends upon your logic
        progressDialog.dismiss();
    };
};

searchWord方法的问题在于它仍然从另一个线程更新UI,请尝试将代码保留在处理程序中

private final Handler searchHandler = new Handler() {
    @Override
    public void handleMessage(final Message msg) {
        super.handleMessage(msg);
//call searchWord method from here depends upon your logic
        progressDialog.dismiss();
    };
};

我回答了一个类似的问题

编写AsyncTask类来替换所有线程/消息传递代码以及简化典型的“show dialog/do background task/stop dialog”应用程序要容易得多

我在那里编写的代码可以直接插入您的代码,用您的
searchWord()
替换
doLogin()


我强烈建议您编写线程和处理程序的每个实例都使用AsyncTask类替换它们。

我回答了一个类似的问题

编写AsyncTask类来替换所有线程/消息传递代码以及简化典型的“show dialog/do background task/stop dialog”应用程序要容易得多

我在那里编写的代码可以直接插入您的代码,用您的
searchWord()
替换
doLogin()


我强烈建议您编写线程和处理程序的每个实例,用AsyncTask类替换它们。

这个答案不是最好的,但它适用于我的问题!我决定改用AsyncTask。这个答案不是最好的,但它适用于我的问题!我决定改用AsyncTask。