如何在Android中调用Activity

时间:2012-11-26 21:38:10

标签: android

我有以下情况。 我的应用程序中有2个包。 com.example.package1; org.otherexample.package2;

我在清单中声明如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.package1"
   android:versionCode="1"
   android:versionName="1.0" >
   <activity android:name=".ActivityfromPackage1"/>
   <activity android:name="org.otherexample.package2.ActivityFromPackage2"/>

</manifest>

这是清单,现在我想从ActivityFromPackage1 ActivityFromPackage2调用 我这样做了:

import org.otherexample.package2.ActivityFromPackage2
..........
Intent intent = new Intent(this,ActivityFromPackage2.class);
startActivity(intent);

我收到以下错误:

Unable to start Activity com.example.package1/org.otherexample.package2.ActivityFromPackage2:
JavaLang nullpointer exception

如何调用活动? 非常感谢。

3 个答案:

答案 0 :(得分:1)

我怀疑你在这里发布的内容之外的东西是问题的根源。我刚做了一个示例项目来测试它。

以下是清单中的两个活动声明:

        <activity
            android:name="com.example.packagetesting.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.example.anotherpackage.AnotherActivity"
            android:label="@string/title_activity_another" >
        </activity>

以下是MainActivity的相关位:

import com.example.anotherpackage.AnotherActivity;
...
Intent i = new Intent(this, AnotherActivity.class);
startActivity(i);

请注意,在我的第二个Activity中,我必须从主包中导入R:

import com.example.packagetesting.R;

但在这样做之后,所有事情都会编译并正确运行。

另请注意,在我的日志文件中显示:

Starting: Intent { cmp=com.example.packagetesting/com.example.anotherpackage.AnotherActivity }

与您的相似,即使AnotherActivity仅在com.example.anotherpackage

,也会显示两个不同的包名称

答案 1 :(得分:0)

我认为你可能需要稍微修改你的清单,试着让它看起来更像这个

   <activity android:name=".ActivityFromP2">
  <intent-filter>
    <action android:name="package2.intent.action.Launch" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

这个问题很有用

launch activities from different package

答案 2 :(得分:0)

我刚检查了你的代码。它在我的应用程序中工作。

清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.firstapp.tempp.testapp"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="15" />

    <uses-permission android:name="android.permission.READ_CALENDAR" />
    <uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="org.pac.abcs.TestActivity" >
        </activity>
    </application>

</manifest>

Java代码:

btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                startActivity(new Intent(MainActivity.this, TestActivity.class));
            }
        });

所以它不是包装声明的问题。只有一个疑问,您是否在第二个活动(ActivityFromPackage2)或com.example.package1.R中导入了android.R?您需要导入com.example.package1.R。