我創建了一個活動,在此之後,我創建了一個從電話簿讀取的線程,執行一些字符串操作並根據規則在主UI上創建各種按鈕。在Android中爲用戶界面創建新線程
我有下面的代碼,但一些如何終止應用程序。
任何人都可以請幫助我。
public class Phone extends Activity {
/** Called when the activity is first created. */
ProgressDialog pbarDialog;
LinearLayout ll;
Button b;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ScrollView sv = new ScrollView(this);
ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
sv.addView(ll);
setContentView(sv);
pbarDialog = new ProgressDialog(this);
pbarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pbarDialog.setMessage("Reading from Phone Book");
pbarDialog.setCancelable(false);
pbarDialog.show();
pbarDialog.incrementProgressBy(0);
new TheTask().execute();
}
private class TheTask extends AsyncTask<Void, Integer, Void>{
@Override
protected void onPreExecute() {
pbarDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pbarDialog.setMessage("Reading from Phone Book");
pbarDialog.setCancelable(false);
pbarDialog.show();
pbarDialog.incrementProgressBy(0);
}
@Override
protected Void doInBackground(Void... params) {
ReadPhoneBook();
return null;
}
@Override
protected void onPostExecute(Void result) {
pbarDialog.dismiss();
}
}
private void ReadPhoneBook() {
int i=0;
int count=0;
//this is a temp function, it just creates buttons, does not read the phone book.
for (i=0;i<10;i++)
{
b = new Button(this);
b.setText("Testing");
b.setId(1);
final Activity self = this;
b.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
initiateACall(v,self);
}
});
ll.addView(b);
if (i%3 == 0){
pbarDialog.incrementProgressBy(30*i/3);
}
}
}
我收到以下錯誤:使用Android的的AsyncTask類
06-24 21:52:36.274: WARN/dalvikvm(297): threadid=7: thread exiting with uncaught exception (group=0x4001d800) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): FATAL EXCEPTION: AsyncTask #1 06-24 21:52:36.436: ERROR/AndroidRuntime(297): java.lang.RuntimeException: An error occured while executing doInBackground() 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.os.AsyncTask$3.done(AsyncTask.java:200) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.lang.Thread.run(Thread.java:1096) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewRoot.checkThread(ViewRoot.java:2802) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewRoot.requestLayout(ViewRoot.java:594) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.View.requestLayout(View.java:8125) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.View.requestLayout(View.java:8125) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.View.requestLayout(View.java:8125) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.View.requestLayout(View.java:8125) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.widget.ScrollView.requestLayout(ScrollView.java:1200) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.View.requestLayout(View.java:8125) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewGroup.addView(ViewGroup.java:1863) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewGroup.addView(ViewGroup.java:1822) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.view.ViewGroup.addView(ViewGroup.java:1802) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at ReadPhoneBook(IndiaCalling.java:148) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at access$0(IndiaCalling.java:133) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at $TheTask.doInBackground(IndiaCalling.java:79) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at $TheTask.doInBackground(IndiaCalling.java:1) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at android.os.AsyncTask$2.call(AsyncTask.java:185) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 06-24 21:52:36.436: ERROR/AndroidRuntime(297): ... 4 more 06-24 21:52:36.564: WARN/ActivityManager(67): Force finishing activity net.WhileOne.IndiaCalling/.IndiaCalling 06-24 21:52:37.534: WARN/InputManagerService(67): Window already focused, ignoring focus gain of: [email protected] 06-24 21:52:39.004: ERROR/WindowManager(297): Activity Phone has leaked window [email protected] that was originally added here 06-24 21:52:39.004: ERROR/WindowManager(297): android.view.WindowLeaked: Activity Phone has leaked window [email protected] that was originally added here 06-24 21:52:39.004: ERROR/WindowManager(297): at android.view.ViewRoot.(ViewRoot.java:247) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.view.Window$LocalWindowManager.addView(Window.java:424) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.Dialog.show(Dialog.java:241) 06-24 21:52:39.004: ERROR/WindowManager(297): at Phone.onCreate(Phone.java:47) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.os.Handler.dispatchMessage(Handler.java:99) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.os.Looper.loop(Looper.java:123) 06-24 21:52:39.004: ERROR/WindowManager(297): at android.app.ActivityThread.main(ActivityThread.java:4627) 06-24 21:52:39.004: ERROR/WindowManager(297): at java.lang.reflect.Method.invokeNative(Native Method) 06-24 21:52:39.004: ERROR/WindowManager(297): at java.lang.reflect.Method.invoke(Method.java:521) 06-24 21:52:39.004: ERROR/WindowManager(297): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 06-24 21:52:39.004: ERROR/WindowManager(297): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 06-24 21:52:39.004: ERROR/WindowManager(297): at dalvik.system.NativeStart.main(Native Method)
它如何終止?產生一個錯誤?日誌是什麼樣的? –