Import-Klasse, die sich der Aktivität, ohne einen Blick
Habe ich eine LoginActivity.java die Importe VersionCheck.java.
VersionCheck.java hat eine Klasse VersionCheck, erstreckt sich die Aktivität um den Zugang zu getPackageManager().
In der LoginActivity bekomme ich ein Objekt der Klasse VersionCheck, und die run-Methode getVersionName zum abrufen der versionName der Anwendung.
Wenn ich die Anwendung ausführen, bekomme ich eine java.lang.NullPointerException bei pinfo = getPackageManager().getPackageInfo(packageName, 0);
im getVersionName Methode.
Wenn ich die getVersionName Methode in meiner main-Klasse der code funktioniert, aber ich möchte erstellen Sie eine separate Klasse mit dieser Methode, wie ich diese Methode Häufig in Anwendungen.
Siehe code unten.
LoginActivity.java
package com.itse.htsurvey;
import com.itse.tools.*;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
public class LoginActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
displayVersionName();
}
//---------------------------------------------------------------------------------------------------------
//retrieves version name and displays it
//---------------------------------------------------------------------------------------------------------
private void displayVersionName() {
//object of class versioncheck
VersionCheck vc = new VersionCheck();
TextView tvVersion = (TextView) findViewById(R.id.tvVersion);
tvVersion.setText("Version " + vc.getVersionName(getPackageName()));
}
}
VersionCheck.java
package com.itse.tools;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
public class VersionCheck extends Activity{
//---------------------------------------------------------------------------------------------------------
//Retrieves the version name of the application and returns to method caller
//---------------------------------------------------------------------------------------------------------
public String getVersionName(String packageName) {
PackageInfo pinfo = null;
try {
pinfo = getPackageManager().getPackageInfo(packageName, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return pinfo.versionName;
}
}
Fehlermeldung
05-24 13:07:23.146: W/dalvikvm(888): threadid=1: thread exiting with uncaught exception (group=0x409c01f8)
05-24 13:07:23.166: E/AndroidRuntime(888): FATAL EXCEPTION: main
05-24 13:07:23.166: E/AndroidRuntime(888): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.itse.htsurvey/com.itse.htsurvey.LoginActivity}: java.lang.NullPointerException
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1956)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread.access$600(ActivityThread.java:123)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.os.Looper.loop(Looper.java:137)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread.main(ActivityThread.java:4424)
05-24 13:07:23.166: E/AndroidRuntime(888): at java.lang.reflect.Method.invokeNative(Native Method)
05-24 13:07:23.166: E/AndroidRuntime(888): at java.lang.reflect.Method.invoke(Method.java:511)
05-24 13:07:23.166: E/AndroidRuntime(888): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-24 13:07:23.166: E/AndroidRuntime(888): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-24 13:07:23.166: E/AndroidRuntime(888): at dalvik.system.NativeStart.main(Native Method)
05-24 13:07:23.166: E/AndroidRuntime(888): Caused by: java.lang.NullPointerException
05-24 13:07:23.166: E/AndroidRuntime(888): at android.content.ContextWrapper.getPackageManager(ContextWrapper.java:86)
05-24 13:07:23.166: E/AndroidRuntime(888): at com.itse.tools.VersionCheck.getVersionName(VersionCheck.java:16)
05-24 13:07:23.166: E/AndroidRuntime(888): at com.itse.htsurvey.LoginActivity.displayVersionName(LoginActivity.java:29)
05-24 13:07:23.166: E/AndroidRuntime(888): at com.itse.htsurvey.LoginActivity.onCreate(LoginActivity.java:16)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.Activity.performCreate(Activity.java:4465)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
05-24 13:07:23.166: E/AndroidRuntime(888): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
05-24 13:07:23.166: E/AndroidRuntime(888): ... 11 more
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht nur die Erweiterung der Activity-Klasse. Sie sollten pass Rahmen der ersten Aktivität, der Methode.
Wie:
Nur verlängern die Aktivität der Klasse, wenn Sie es als eine Aktivität 😀