Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getPackageManager()在静态类中使用时出错_Java_Android - Fatal编程技术网

Java getPackageManager()在静态类中使用时出错

Java getPackageManager()在静态类中使用时出错,java,android,Java,Android,因此,当将下面的代码放在活动中时,可以正常工作,但当将其作为静态方法放在静态java类getPackageManager中时,会生成一个错误…不确定原因 public String VersionInfo(){ String version = ""; try { version = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageMa

因此,当将下面的代码放在活动中时,可以正常工作,但当将其作为静态方法放在静态java类getPackageManager中时,会生成一个错误…不确定原因

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的基础知识。。。该类的每个非静态方法只能通过该类实例调用。不能直接从静态方法调用非静态方法