Получение силы закрыть, когда я добавляю представление в другое представление, когда поток работает

1

Я получаю ошибку ниже

12-30 05:40:40.484: ERROR/AndroidRuntime(413): Uncaught handler: thread Thread-10 exiting due to uncaught exception
12-30 05:40:40.494: ERROR/AndroidRuntime(413): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.ViewRoot.checkThread(ViewRoot.java:2629)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.ViewRoot.requestLayout(ViewRoot.java:545)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.View.requestLayout(View.java:7657)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.View.requestLayout(View.java:7657)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.View.requestLayout(View.java:7657)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.View.requestLayout(View.java:7657)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.View.requestLayout(View.java:7657)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.ViewGroup.addView(ViewGroup.java:1749)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.ViewGroup.addView(ViewGroup.java:1708)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at android.view.ViewGroup.addView(ViewGroup.java:1688)
12-30 05:40:40.494: ERROR/AndroidRuntime(413):     at com.wwwww.shout.presentationLayer.Shout$1.run(Shout.java:137)

и мой код

myProgressDialog = ProgressDialog.show(Shout.this,"","Loading...",true);

         new Thread() 
         {
         public void run()
         {
             String xml;



                 xml="<spGetUserMessages><SearchLocation></SearchLocation></spGetUserMessages>";
                 messages =parse.GetGetUserMessages(dataparsing.ILGetUserMessages(xml));
        myProgressDialog.dismiss();
((LinearLayout)findViewById(R.id.LinearlayoutMessage)).addView(iiii);


      }

    }.start();

во время добавления представлений в макет, я получаю вышеуказанную ошибку. В этом что-то не так. Пожалуйста, дайте мне несколько предложений. Спасибо заранее

Теги:

2 ответа

2
Лучший ответ

Вы можете использовать обработчики, как в в этом примере (handleMessage работает в потоке пользовательского интерфейса, поэтому вы можете изменять виды) или для более сложных вещи, используйте AsyncTask (onPostExecute выполняется также в потоке пользовательского интерфейса)

Как ваш код должен выглядеть с помощью Handler:

private Handler myHandler = new Handler() {
    public void handleMessage(Message msg) {
        //in case you passed data to message (see below) here you can retrieve it
        myProgressDialog.dismiss();
        ((LinearLayout)findViewById(R.id.LinearlayoutMessage)).addView(iiii);
    }
};

private myProgressDialog = ProgressDialog.show(Shout.this,"","Loading...",true);

new Thread() {
    public void run() {
        String xml;
        xml="<spGetUserMessages><SearchLocation></SearchLocation></spGetUserMessages>";
        messages = parse.GetGetUserMessages(dataparsing.ILGetUserMessages(xml));
        Message msg = myHandler.obtainMessage();
        //here you can add data to the message using msg.obj, msg.what...
        //refer to http://developer.android.com/reference/android/os/Handler.html for details
        myHandler.sendMessage(msg);
   }
}.start();
  • 0
    Спасибо. Работает нормально
1

Только поток пользовательского интерфейса может изменять представления.

Используйте Activity.runOnUIThread(Runnable)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню