viewpager
과 actiontabs
이 각각 있습니다. 각 작업 탭에는 자체 레이아웃이 있습니다. 레이아웃 중 하나에서 배경을 변경하는 AsyncTask
을 클릭하면 아래 그림과 같이 색상이 실행되어야하는 버튼이 있습니다.asynchTask를 실행할 때 오류가 발생했습니다.
런타임시 logcat에서 다음 오류가 발생합니다.
logcat 오류를 살펴보고 친절하게도 내가 코드에서 누락 된 부분을 알려주십시오.
코드
class AsyncColor extends AsyncTask<String, Integer, String> {
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
for (int i = 0; i < params.length; i++){
rl_3.setBackgroundColor(Color.parseColor(params[i]));
}
return "done";
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
btn_asynch.setText(result);
}
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
btn_asynch.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
new AsynchColor().execute(asynchBLUE, asynchGREEN, asynchRED, asynchBLUE1, asynchGREEN1, asynchRED1);
}
});
로그 캣 :
12-06 13:13:15.049: E/AndroidRuntime(5591): FATAL EXCEPTION: AsyncTask #1
12-06 13:13:15.049: E/AndroidRuntime(5591): java.lang.RuntimeException: An error occured while executing doInBackground()
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.os.AsyncTask$3.done(AsyncTask.java:300)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.lang.Thread.run(Thread.java:841)
12-06 13:13:15.049: E/AndroidRuntime(5591): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:6832)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1053)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.ViewGroup.invalidateChild(ViewGroup.java:4518)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.View.invalidate(View.java:11687)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.View.setBackgroundDrawable(View.java:16248)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.View.setBackground(View.java:16139)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.view.View.setBackgroundColor(View.java:16101)
12-06 13:13:15.049: E/AndroidRuntime(5591): at com.example.viewpagerwithactiontabstest00.Aufgabe_7$AsynchColor.doInBackground(Aufgabe_7.java:72)
12-06 13:13:15.049: E/AndroidRuntime(5591): at com.example.viewpagerwithactiontabstest00.Aufgabe_7$AsynchColor.doInBackground(Aufgabe_7.java:1)
12-06 13:13:15.049: E/AndroidRuntime(5591): at android.os.AsyncTask$2.call(AsyncTask.java:288)
12-06 13:13:15.049: E/AndroidRuntime(5591): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
모든 UI 업데이트는 onPostExecute, onPreExecute, onProgressUpdate에 있어야합니다. 당신은 onBackground에서 UI를 업데이트 할 수 없으며,'rl_3.setBackgroundColor (Color.parseColor (params [i]));'를 함수 위로 이동하십시오. –
doInBackground 메소드에서 UI 업데이트를 할 수 없습니다 – Amy