Я получаю ошибку ниже
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();
во время добавления представлений в макет, я получаю вышеуказанную ошибку. В этом что-то не так. Пожалуйста, дайте мне несколько предложений. Спасибо заранее
Вы можете использовать обработчики, как в в этом примере (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();
Только поток пользовательского интерфейса может изменять представления.
Используйте Activity.runOnUIThread(Runnable)