2013-02-25 37 views
2

我想提出一个进度条,而在云进度错误

这里获取数据是我的代码:

public void progressBar() { 
     progress = ProgressDialog.show(this, "dialog title", 
        "dialog message", true); 

       new Thread(new Runnable() { 
        public void run() 
        { 
        // do the thing that takes a long time 
         displayView(); 
        runOnUiThread(new Runnable() { 
         public void run() 
         { 
         progress.dismiss(); 
         } 
        }); 
        } 
       }).start(); 
    } 

和我displayView();方法

下面是代码:

public void displayView() { 

     listAdapter = new ArrayAdapter<String>(this, R.layout.listview_format, 
       R.id.item_list,handler.getRetrieveData()); 
     listView = (ListView)findViewById(R.id.listView2); 
     listView.setAdapter(listAdapter); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> arg0, View v, int position , 
        long id) { 

       intent = new Intent(TechiesActivity.this,ItemInfoActivity.class); 
       startActivity(intent);    
      } 
     }); 

    } 

我得到这种类型的错误从logcat的

错误:

02-25 14:39:49.980: E/AndroidRuntime(1654): FATAL EXCEPTION: Thread-10 
02-25 14:39:49.980: E/AndroidRuntime(1654): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.view.ViewRoot.checkThread(ViewRoot.java:2802) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.view.ViewRoot.invalidateChild(ViewRoot.java:607) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:633) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:2505) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.view.View.invalidate(View.java:5139) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.widget.AbsListView.resetList(AbsListView.java:1011) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.widget.ListView.resetList(ListView.java:493) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at android.widget.ListView.setAdapter(ListView.java:422) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at com.shop.browser.TechiesActivity.displayView(TechiesActivity.java:111) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at com.shop.browser.TechiesActivity$1.run(TechiesActivity.java:75) 
02-25 14:39:49.980: E/AndroidRuntime(1654):  at java.lang.Thread.run(Thread.java:1096) 
02-25 14:39:51.629: E/WindowManager(1654): Activity com.shop.browser.TechiesActivity has leaked window [email protected] that was originally added here 
02-25 14:39:51.629: E/WindowManager(1654): android.view.WindowLeaked: Activity com.shop.browser.TechiesActivity has leaked window [email protected] that was originally added here 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.ViewRoot.<init>(ViewRoot.java:247) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
02-25 14:39:51.629: E/WindowManager(1654): at android.app.Dialog.show(Dialog.java:241) 
02-25 14:39:51.629: E/WindowManager(1654): at android.app.ProgressDialog.show(ProgressDialog.java:107) 
02-25 14:39:51.629: E/WindowManager(1654): at android.app.ProgressDialog.show(ProgressDialog.java:90) 
02-25 14:39:51.629: E/WindowManager(1654): at com.shop.browser.TechiesActivity.progressBar(TechiesActivity.java:68) 
02-25 14:39:51.629: E/WindowManager(1654): at com.shop.browser.TechiesActivity.onClick(TechiesActivity.java:198) 
02-25 14:39:51.629: E/WindowManager(1654): at java.lang.reflect.Method.invokeNative(Native Method) 
02-25 14:39:51.629: E/WindowManager(1654): at java.lang.reflect.Method.invoke(Method.java:521) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.View$1.onClick(View.java:2067) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.View.performClick(View.java:2408) 
02-25 14:39:51.629: E/WindowManager(1654): at android.view.View$PerformClick.run(View.java:8816) 
02-25 14:39:51.629: E/WindowManager(1654): at android.os.Handler.handleCallback(Handler.java:587) 
02-25 14:39:51.629: E/WindowManager(1654): at android.os.Handler.dispatchMessage(Handler.java:92) 
02-25 14:39:51.629: E/WindowManager(1654): at android.os.Looper.loop(Looper.java:123) 
02-25 14:39:51.629: E/WindowManager(1654): at android.app.ActivityThread.main(ActivityThread.java:4627) 
02-25 14:39:51.629: E/WindowManager(1654): at java.lang.reflect.Method.invokeNative(Native Method) 
02-25 14:39:51.629: E/WindowManager(1654): at java.lang.reflect.Method.invoke(Method.java:521) 
02-25 14:39:51.629: E/WindowManager(1654): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 
02-25 14:39:51.629: E/WindowManager(1654): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 
02-25 14:39:51.629: E/WindowManager(1654): at dalvik.system.NativeStart.main(Native Method) 

我不知道我为什么得到一个错误,我是新来的android编程请帮助我,并提前感谢。

回答

2

只要打电话给runOnUiThread方法里面DisplayView方法,它应该罚款

public void progressBar() { 
     progress = ProgressDialog.show(this, "dialog title", 
        "dialog message", true); 

       new Thread(new Runnable() { 
        public void run() 
        { 
        // do the thing that takes a long time 
         runOnUiThread(new Runnable() { 
         public void run() 
         { 
         displayView();      
         progress.dismiss(); 
         } 
        }); 
        } 
       }).start(); 
    } 
+1

真棒兄弟谢谢 – user1708134 2013-02-25 07:11:14

+0

@ user1708134总是乐意帮助兄弟:) – 2013-02-25 07:12:19

2

不能执行从工人/后台线程任何UI更新。所以你的方法

displayView(); 

你需要调用它在runOnUiThread()

runOnUiThread(new Runnable() { 
    public void run() { 
     displayView(); 
     progress.dismiss(); 
    } 
});