我有一个.java文件:

 ....

 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;

 ....

   /* PackageInfo packageInfo =
   getPackageManager().getPackageInfo(getPackageName(),0);
   curVersionCode = packageInfo.versionCode;*/

   PackageManager pm = getPackageManager();
   String pn = getPackageName();
   PackageInfo pi = pm.getPackageInfo(pn,0);
   curVersionCode = pi.versionCode;

   ....

为了理解这个错误,我把代码写了四行。如您所见,这两行代码在注释中。现在,这段代码不起作用,当我尝试构建时,这里会给出一个PackageManager.NameNotFoundException的错误。为了清楚起见,我在另一个文件中使用了这段代码,这不会导致错误;因此不必担心包名。这个错误的原因是什么?还附加了一个图像以清除错误。
java - PackageManager.NameNotFoundException-LMLPHP
为了解决这个问题,我也尝试过这样的方法:this.getPackageManager()getBaseContext().getPackageManager()getApplicationContext().getPackageManager();但都是徒劳的。

最佳答案

pm.getPackageInfo抛出需要处理的。只需按以下步骤用try-catch包起来:

    final PackageManager pm = getPackageManager();
    final String pn = getPackageName();
    PackageInfo pi = null;
    try {
        pi = pm.getPackageInfo(pn, 0);
    } catch (NameNotFoundException e) {
        //LOG the exception
    }
    curVersionCode = pi!=null ? pi.versionCode:-1;

10-05 18:53