2013-07-01 65 views
0

我通過此代碼獲取第三方應用程序的列表。如何在android中(而不是ListView)填充列表

ApplicationInfo ai; 
    final PackageManager pm = main.getPackageManager(); 

    List<ApplicationInfo> packages1 = null; 
    int index = 0; 

    List<ApplicationInfo> packages = pm.getInstalledApplications(PackageManager.GET_META_DATA); 

    for (ApplicationInfo appInfo : packages) 
    { 
     if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) 
     { 
      // IS A SYSTEM APP 
     } 

     else 
     { 
      packages1.add(index, appInfo); 
      index++; 
     } 
    } 

但我得到一個例外,當我評論這行:

packages1.add(index, appInfo); 

然後代碼正確執行,但它提供了異常,由於這條線。這裏是我的logcat:

07-01 05:19:32.058: W/dalvikvm(5558): threadid=8: thread exiting with uncaught exception (group=0x4001d7d0) 
07-01 05:19:32.065: E/AndroidRuntime(5558): FATAL EXCEPTION: AsyncTask #1 
07-01 05:19:32.065: E/AndroidRuntime(5558): java.lang.RuntimeException: An error occured while executing doInBackground() 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at android.os.AsyncTask$3.done(AsyncTask.java:200) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.lang.Thread.run(Thread.java:1096) 
07-01 05:19:32.065: E/AndroidRuntime(5558): Caused by: java.lang.NullPointerException 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at com.example.first.Fetch_Software.doInBackground(Fetch_Software.java:46) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at com.example.first.Fetch_Software.doInBackground(Fetch_Software.java:1) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at android.os.AsyncTask$2.call(AsyncTask.java:185) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
07-01 05:19:32.065: E/AndroidRuntime(5558):  ... 4 more 
07-01 05:19:36.894: E/WindowManager(5558): Activity com.example.first.MainActivity has leaked window [email protected] that was originally added here 
07-01 05:19:36.894: E/WindowManager(5558): android.view.WindowLeaked: Activity com.example.first.MainActivity has leaked window [email protected] that was originally added here 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.ViewRoot.<init>(ViewRoot.java:247) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:171) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:114) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.Window$LocalWindowManager.addView(Window.java:424) 
07-01 05:19:36.894: E/WindowManager(5558): at android.app.Dialog.show(Dialog.java:241) 
07-01 05:19:36.894: E/WindowManager(5558): at com.example.first.MainActivity.onClick(MainActivity.java:114) 
07-01 05:19:36.894: E/WindowManager(5558): at java.lang.reflect.Method.invokeNative(Native Method) 
07-01 05:19:36.894: E/WindowManager(5558): at java.lang.reflect.Method.invoke(Method.java:521) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.View$1.onClick(View.java:2067) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.View.performClick(View.java:2408) 
07-01 05:19:36.894: E/WindowManager(5558): at android.view.View$PerformClick.run(View.java:8818) 
07-01 05:19:36.894: E/WindowManager(5558): at android.os.Handler.handleCallback(Handler.java:587) 
07-01 05:19:36.894: E/WindowManager(5558): at android.os.Handler.dispatchMessage(Handler.java:92) 
07-01 05:19:36.894: E/WindowManager(5558): at android.os.Looper.loop(Looper.java:123) 
07-01 05:19:36.894: E/WindowManager(5558): at android.app.ActivityThread.main(ActivityThread.java:4627) 
07-01 05:19:36.894: E/WindowManager(5558): at java.lang.reflect.Method.invokeNative(Native Method) 
07-01 05:19:36.894: E/WindowManager(5558): at java.lang.reflect.Method.invoke(Method.java:521) 
07-01 05:19:36.894: E/WindowManager(5558): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:871) 
07-01 05:19:36.894: E/WindowManager(5558): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:629) 
07-01 05:19:36.894: E/WindowManager(5558): at dalvik.system.NativeStart.main(Native Method) 

回答

3

當您忘記初始化數據類型時,發生空指針,此處您忘記初始化您的列表。

只是初始化列表如下圖所示:

List<ApplicationInfo> packages1 = new List<ApplicationInfo>(); 
5

我想你錯過了宣言線。

它應該是:

List<ApplicationInfo> packages1 = null; 
packages1 = new ArrayList<ApplicationInfo>(); 
+1

確定我得到了你,但是這條線應該是這樣的: packages1 = new ArrayList (); –

+0

修復了您選擇的實施方案。 – frogmanx

3

首先你這樣做:

List<ApplicationInfo> packages1 = null; 

然後你這樣做:

packages1.add(index, appInfo); 

翻譯爲:

null.add(index, appInfo); 

這最終變成了:

07-01 05:19:32.065: E/AndroidRuntime(5558): Caused by: java.lang.NullPointerException 
07-01 05:19:32.065: E/AndroidRuntime(5558):  at com.example.first.Fetch_Software.doInBackground(Fetch_Software.java:46) 
在你的日誌

1

包1尚未初始化,請嘗試以下操作:

package1 = new ArrayList<ApplicationInfo>();