Android emulator PackageInfo versionCode和versionName在手机上为空,但在emulator上工作

Android emulator PackageInfo versionCode和versionName在手机上为空,但在emulator上工作,android-emulator,android,Android Emulator,Android,我正在构建一个不会进入市场的私人应用程序。因此,我需要提取当前版本的应用程序(而不是平台)信息,并与服务器检查是否有更新。它在模拟器上工作得很好,但是当我在DroidX上安装签名的APK时,它返回null。代码如下: PackageInfo pInfo = null; try { pInfo = getPackageManager().getPackageInfo("com.rubiconproject.expenses", PackageManager

我正在构建一个不会进入市场的私人应用程序。因此,我需要提取当前版本的应用程序(而不是平台)信息,并与服务器检查是否有更新。它在模拟器上工作得很好,但是当我在DroidX上安装签名的APK时,它返回null。代码如下:

PackageInfo pInfo = null;

try {
    pInfo = getPackageManager().getPackageInfo("com.rubiconproject.expenses",
                PackageManager.GET_META_DATA);
} catch (NameNotFoundException e) {
    return;
} 
String postUrl = DbAdapter.REMOTE_DB +
                "/application/active-version/platform/android/version/" +
                pInfo.versionCode + "." + pInfo.versionName;
编辑:

我在下面编写了一个小得多的应用程序,它显示了我的问题(TestingActivity.java):

以及舱单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.rubiconproject.testing"
        android:versionCode="1"
        android:versionName="1.0">
    <uses-sdk android:minSdkVersion="9" />
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".TestingActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
其中第26行对应于:

    tt.setText(pInfo.versionCode);

有人知道为什么会发生这种情况吗?

您的manifest.xml是否包含android:versionCode和androd:versionName属性

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.package.name"
  android:versionCode="2"
  android:versionName="1.1">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        ...
    </application>
</manifest>

...

找到了答案。问题出在键盘和椅子之间。我看到null,但事实上字符串的构建不正确。

试试这个Hey Kannapan,谢谢你的回复。不幸的是,我正在尝试在我的应用程序上获取版本,而不是我统计的手机版本(尽管这肯定会有帮助),第26行是
tt2.setText(pInfo.versionName)。如果是这种情况,则NPE是由
tt2
pInfo
为空引起的
pInfo
不为空,否则您将在第24行获得NPE。因此,由于
R.id.textView2
视图不存在,
tt2
似乎为空。现在这些可能都没有意义了,但我想知道你的短程序是否真的犯了同样的错误。因为我看不出你的回答所说的“字符串构建不正确”。嘿,乔娜,是的。抱歉,StackOverflow n00b,我的代码块格式不正确,因此被隐藏。
    tt.setText(pInfo.versionCode);
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.package.name"
  android:versionCode="2"
  android:versionName="1.1">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        ...
    </application>
</manifest>