Java getPackageManager()在静态类中使用时出错
因此,当将下面的代码放在活动中时,可以正常工作,但当将其作为静态方法放在静态java类getPackageManager中时,会生成一个错误…不确定原因Java getPackageManager()在静态类中使用时出错,java,android,Java,Android,因此,当将下面的代码放在活动中时,可以正常工作,但当将其作为静态方法放在静态java类getPackageManager中时,会生成一个错误…不确定原因 public String VersionInfo(){ String version = ""; try { version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageMa
public String VersionInfo(){
String version = "";
try {
version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e("tag", e.getMessage());
}
return version;
}
如果在活动外部调用,则需要使用上下文调用getPackageManager()。在versionInfo方法中传递上下文,并使用该上下文获取包管理器。大概是这样的:
public String VersionInfo(final Context context){
String version = "";
try {
version = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e("tag", e.getMessage());
}
return version;
}
Test.VersionInfo(mActivity); // where mActivity is nothing but current context this. you can use this instead.
这种方法
/** Return PackageManager instance to find global package information. */
public abstract PackageManager getPackageManager();
在上下文中定义。所以要访问,您需要一个上下文对象,或者您可以在上下文的子类中访问。
以下是活动的层次结构-
Context (android.content)
-ContextWrapper (android.content)
-ContextThemeWrapper (android.view)
-Activity (android.app)
因此,活动可以访问方法getPackageManager()
请尝试以下方法:
在您的活动中
可以这样调用:
public String VersionInfo(final Context context){
String version = "";
try {
version = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e("tag", e.getMessage());
}
return version;
}
Test.VersionInfo(mActivity); // where mActivity is nothing but current context this. you can use this instead.
这是下面的静态类:
static class Test{
public static String VersionInfo(Context ctx){
String version = "";
try {
version = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
Log.e("tag", e.getMessage());
}
return version;
}
}
请学习java的基础知识。。。该类的每个非静态方法只能通过该类实例调用。不能直接从静态方法调用非静态方法