猿问

从 asyncTask 中的异常访问视图的问题

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

实际上,我真的不知道这里的真正问题是让我告诉你发生了什么

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

这是一张图片,让您了解我的项目是什么。

http://img1.mukewang.com/616fcefd0001643902330330.jpg

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


我的班级结构是


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

            }

        }

    }

}

我不知道如何解释更多。


慕标5832272
浏览 128回答 2
2回答

POPMUISE

您只能在应用程序的主线程中更改视图。doInBackground 不在您的应用程序的主线程中运行。
随时随地看视频慕课网APP

相关分类

Java
我要回答