2016-12-04 1 views
0

Ich bin ziemlich neu in Android-Programmierung. Ich habe heute Android Studio heruntergeladen und ein neues Projekt gestartet. Ich fügte dem Formular eine leere Aktivität mit einer Textansicht mit dem folgenden Code hinzu.Android-Paketmanager Liste verursacht App zum Absturz

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" /> 

MAIN CODE:

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

Aus irgendeinem Grund die App stürzt ab, sobald es gestartet wird. Wenn ich den Code entferne, den ich schrieb und nur bis

setContentView(R.layout.activity_main); 

hält, funktioniert es gut, aber ist leer.

EDIT: Stacktrace https://pastebin.com/dHHygFkQ

+1

können Sie bitte bearbeiten und stacktrace hinzufügen? – fbwnd

+0

@fbwnd Ich habe soeben die Stacktrace-Option zur Befehlszeile hinzugefügt (googled, idk was es ist). Wo sehe ich seine Ausgabe? – Haardik

+0

Sie können es von AndroidStudio sehen. Wenn Sie die Befehlszeile bevorzugen, verwenden Sie: adb logcat -s AndroidRuntime und fügen Sie die Ausgabe (wenn es abstürzt) hier – fbwnd

Antwort

0

Wie gesagt in den Kommentaren, die zweite setContentView entfernen.

Sie übergeben null an tv1.append. Als appInfo.name gibt null zurück. Siehe PackageManager's applicationInfo.name is always null

Verwendung: (String)pm.getApplicationLabel(appInfo).

Zum Beispiel:

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

+0

Das hat funktioniert, vielen Dank <3 – Haardik

+0

Dies wird nur das aktuelle Anwendungslabel –

+0

@KostasDrak Nicht gemäß: https://developer.android.com/reference/android/content/pm/PackageManager.html#getApplicationLabel (android.content.pm.ApplicationInfo) – fbwnd

Verwandte Themen