2016-12-04 45 views
0

我對Android編程頗爲陌生。我今天下載了Android Studio並開始了一個新項目。我用下面的代碼向textview添加了一個空行爲。Android包管理器列表導致應用程序崩潰

XML:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="" 
    android:id="@+id/textView1" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

主要代碼:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    int flags = PackageManager.GET_META_DATA | 
      PackageManager.GET_SHARED_LIBRARY_FILES | 
      PackageManager.GET_UNINSTALLED_PACKAGES; 

    PackageManager pm = getPackageManager(); 
    List<ApplicationInfo> applications = pm.getInstalledApplications(flags); 
    List<String> applicationsInstalled = new ArrayList<String>(); 
    for (ApplicationInfo appInfo : applications) { 
     if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 1) { 
      // System application 
     } else { 
      // Installed by user 
      applicationsInstalled.add(appInfo.name); 
     } 
    } 
    TextView tv1 = (TextView)findViewById(R.id.textView1); 
    for (String app : applicationsInstalled) 
    { 
     tv1.append(app); 
    } 
    setContentView(R.layout.activity_main); 
} 
} 

出於某種原因,只要它啓動應用程序崩潰。如果我刪除我寫的代碼,並且只保留到

setContentView(R.layout.activity_main); 

它工作正常,但是爲空。

編輯:堆棧跟蹤https://pastebin.com/dHHygFkQ

+1

能否請您編輯和添加您的堆棧跟蹤? – fbwnd

+0

@fbwnd我只是將堆棧跟蹤選項添加到命令行(用google搜索,idk是什麼)。我在哪裏看到它的輸出? – Haardik

+0

你可以從AndroidStudio中看到它。 如果您更喜歡命令行 請使用:adb logcat -s AndroidRuntime 並在此處粘貼輸出(當它崩潰時) – fbwnd

回答

0

至於說在評論中,刪除第二個的setContentView。您要通過nulltv1.append。如appInfo.name返回null。見PackageManager's applicationInfo.name is always null

使用: (String)pm.getApplicationLabel(appInfo)

例如:

applicationsInstalled.add((String)pm.getApplicationLabel(appInfo))

+0

這工作,非常感謝你<3 – Haardik

+0

這將只會得到當前的應用程序標籤 –

+0

@ KostasDrak不按照:https://developer.android.com/reference/android/content/pm/PackageManager.html#getApplicationLabel( android.content.pm.ApplicationInfo) – fbwnd