java - 从 asyncTask 中的异常访问 View 时出现问题

标签 java android android-asynctask

enter image description here

我遇到一个问题,我认为我无法从 asyncTask 访问 ListView

其实我真的不知道真正的问题在哪里 让我告诉你发生了什么

我有一个正在执行 AsyncTask 并创建 HttpURLConnection 的 Activity 。有时我会收到异常 (ProtocolException),因为流意外结束。 因此,我为此异常创建了一个处理程序,它调用 Activity 类内的函数或方法来向用户显示消息

这是一张图片,以便您了解我的项目。

image

这里的问题是,每当抛出异常时,都会调用我用来将文本添加到listView的相同函数/方法,但是在调用后listView消失,但是当我手动最小化软键盘时,一切都会变得很好。

我的类(class)结构是

public class MainActivity extends AppCompatActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        addMessageToListView()//works fin here
    }
    protected void addMessage(String message, int userMessage, ListView listView) // the function
    {
        try
        {
            messages.add(new Message(message,userMessage));
            MessagesAdapter messagesAdapter = new MessagesAdapter(messages, getBaseContext());
            messagesAdapter.notifyDataSetChanged();
            listView.setAdapter(messagesAdapter);
        }
        catch (Exception exception)
        {

        }
    }
     private class HttpPostAsyncTask extends AsyncTask<String, Void, String>
    {
        ...
        @Override
        protected void onPostExecute(String result)
        {
            try
            {
                addMessageToListView()//works fin here
            }
            catch (Exception exception)
            {

            }
        }
        protected String doInBackground(String... params)
        {
            String result = "";
            for (int i = 0; i <= 0; ++i)
            {
                result = this.invokePost(params[i], this.postData);
            }
            return result;
        }
        private String invokePost(String requestURL, HashMap<String, String> postDataParams)// called from doInBackground
        {
        try
            {
                addMessageToListView()//works fin here
            }
            catch (Exception exception)
            {
                addMessageToListView()//not orking here
            }
        }
    }
}

实际上我不知道如何解释。

最佳答案

您只能在应用程序的主线程中更改 View 。 doInBackground 不在应用程序的主线程中运行。

关于java - 从 asyncTask 中的异常访问 View 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52588382/

相关文章:

java - 任务应用程序 :processReleaseResources 的 Gradle 构建失败

android - CSS 无法在设备上运行

android - 在屏幕的特定位置绘制自定义 View - Android

java - 运行服务时 Activity 卡住

Android 绑定(bind)服务与 AsyncTask

java - Spring RMI 远程注解配置

java - 如何将键和鼠标事件发送到 Java 小程序?

java - 如何 "anchor"SWT 小部件?

android - 如何每次将动画旋转 90 度?

java - 异步任务整数