2016-12-04 42 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