Создание новой темы для пользовательского интерфейса в Android - PullRequest
0 голосов
/ 25 июня 2011

Я создал Activity, после этого я создал поток, который читает из телефонной книги, выполняет некоторые манипуляции со строками и, основываясь на правилах, создает различные кнопки в главном пользовательском интерфейсе.

У меня есть код ниже, но некоторые из них, как приложение заканчивается.

Может кто-нибудь, пожалуйста, помогите мне.

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);
            }
        }

    }

Я получаю следующую ошибку:

06-24 21: 52: 36.274: WARN / dalvikvm (297): threadid = 7: поток завершается с необработанным исключением (группа = 0x4001d800) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: AsyncTask # 1 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): java.lang.RuntimeException: произошла ошибка при выполнении doInBackground () 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.os.AsyncTask $ 3.done (AsyncTask.java:200) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на java.util.concurrent.FutureTask $ Sync.innerSetException (FutureTask.java:273) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в java.util.concurrent.FutureTask.setException (FutureTask.java:124) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:307) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на java.util.concurrent.FutureTask.run (FutureTask.java:137) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1068) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:561) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на java.lang.Thread.run (Thread.java:1096) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): вызвано: android.view.ViewRoot $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представления, может касаться его представлений. 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.ViewRoot.checkThread (ViewRoot.java:2802) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.ViewRoot.requestLayout (ViewRoot.java:594) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.View.requestLayout (View.java:8125) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.View.requestLayout (View.java:8125) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.View.requestLayout (View.java:8125) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.View.requestLayout (View.java:8125) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.widget.ScrollView.requestLayout (ScrollView.java:1200) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.View.requestLayout (View.java:8125) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.ViewGroup.addView (ViewGroup.java:1863) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.ViewGroup.addView (ViewGroup.java:1822) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.view.ViewGroup.addView (ViewGroup.java:1802) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в ReadPhoneBook (IndiaCalling.java:148) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): при доступе $ 0 (IndiaCalling.java:133) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в $ TheTask.doInBackground (IndiaCalling.java:79) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): в $ TheTask.doInBackground (IndiaCalling.java:1) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на android.os.AsyncTask $ 2.call (AsyncTask.java:185) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): на java.util.concurrent.FutureTask $ Sync.innerRun (FutureTask.java:305) 06-24 21: 52: 36.436: ОШИБКА / AndroidRuntime (297): ... еще 4 06-24 21: 52: 36.564: WARN / ActivityManager (67): Принудительное завершение деятельности net.WhileOne.IndiaCalling / .IndiaCalling06-24 21: 52: 37.534: WARN / InputManagerService (67): окно уже сфокусировано, игнорируя усиление фокуса: com.android.internal.view.IInputMethodClient$Stub$Proxy@44eab020 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): у телефона активности просочилось окно com.android.internal.policy.impl.PhoneWindow$DecorView@44eeacf8, которое было первоначально добавлено здесь 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): android.view.WindowLeaked: в телефоне активности просочилось окно com.android.internal.policy.impl.PhoneWindow$DecorView@44eeacf8, которое было первоначально добавлено здесь 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.view.ViewRoot. (ViewRoot.java:247) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:148) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.view.WindowManagerImpl.addView (WindowManagerImpl.java:91) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.view.Window $ LocalWindowManager.addView (Window.java:424) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.Dialog.show (Dialog.java:241) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): в Phone.onCreate (Phone.java:47) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1047) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2627) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2679) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.ActivityThread.access $ 2300 (ActivityThread.java:125) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:2033) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.os.Handler.dispatchMessage (Handler.java:99) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.os.Looper.loop (Looper.java:123) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на android.app.ActivityThread.main (ActivityThread.java:4627) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): в java.lang.reflect.Method.invokeNative (собственный метод) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): в java.lang.reflect.Method.invoke (Method.java:521) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:868) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) 06-24 21: 52: 39.004: ОШИБКА / WindowManager (297): в dalvik.system.NativeStart.main (собственный метод)

Ответы [ 2 ]

0 голосов
/ 01 августа 2011

Исправлена ​​проблема.Пытался обновить вид в основной активности из ветки.

0 голосов
/ 25 июня 2011

Это статистика вашей темы с использованием класса Android AsyncTask:

new TheTask().execute();

Однако, я не понимаю, почему вы добавляете новые темы:

new Thread(new Runnable(){
            public void run(){          
                //Thread.sleep(5*1000);
                ReadPhoneBook();
                pbarDialog.dismiss();
            }           
        }).start(); 

Почему бы не использовать один или другой?

...