Android -为什么在Intent中使用getResources for application path会导致st



不是硬编码每个活动的包名,我想我会把它放在字符串资源上,并创建一个Intent,如下所示:

Intent i = new Intent(getResources().getString(R.string.path)+"ABOUT");
startActivity(i);

R.string。路径定义如下:

<string name="path">com.myproject.cvd_2009.</string>

这总是导致模拟器在调用启动这样定义的活动时失败。

如果我在不使用资源的情况下创建一个意图,那么模拟器上的应用程序就会按预期工作。(不正确,下面实际上失败了,我认为这是由于解决方案中的问题(1)和(2))。

public void onClick(View v) {
    String s = "com.myproject.cvd_2009.QUESTIONNAIRE1";// getResources().getString(R.string.path)+"QUESTIONNAIRE1";
    Intent i = new Intent(s);
    startActivity(i);
}

这是questionnaire1.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:background="@color/black"
>
    <TextView
        android:id="@+id/question1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/q1"
        android:padding="10pt"
        android:paddingTop="25pt"
    />
    <RadioGroup 
        android:id="@+id/radiogroup1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:weightSum="100"
        android:paddingLeft="10pt"
        android:paddingBottom="10pt"
    >
        <RadioButton android:id="@+id/radio_male"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/male"
                     android:onClick="onRadioButtonClicked"
                     android:layout_weight="50"
        />
        <RadioButton android:id="@+id/radio_female"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:text="@string/female"
                     android:onClick="onRadioButtonClicked"
                     android:layout_weight="50"
        />
    </RadioGroup>
    <TextView
        android:id="@+id/question2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/q2"
        android:padding="10pt"
    />
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:prompt="@string/age_select"
    />

    <LinearLayout 
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/black"
        android:weightSum="100"
        android:gravity="bottom"
    >   
        <Button
            android:id="@+id/button2"
            android:text="@string/button2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="50"
            android:onClick="onClick"
        />
        <Button
            android:id="@+id/button1"
            android:text="@string/button1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="50"
            android:onClick="onClick"
        />
    </LinearLayout>
</LinearLayout>

有人可以解释为什么我不能在创建意图时使用资源吗?

更新到包括Stacktrace从Logcat现在包括在内,我看到有一个空指针异常没有被捕获,我不知道为什么ComponentInfo复制com.myproject。Cvd_2009为活动?我想这就是异常的原因

06-02 12:17:43.102 W/dalvikvm( 1418): threadid=1: thread exiting with uncaught exception (group=0x41465700)
06-02 12:17:43.132 E/AndroidRuntime( 1418): FATAL EXCEPTION: main
06-02 12:17:43.132 E/AndroidRuntime( 1418): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.cvd_2009/com.myproject.cvd_2009.Questionnaire1}: java.lang.NullPointerException
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.os.Handler.dispatchMessage(Handler.java:99)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.os.Looper.loop(Looper.java:137)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread.main(ActivityThread.java:5103)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at java.lang.reflect.Method.invokeNative(Native Method)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at java.lang.reflect.Method.invoke(Method.java:525)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at dalvik.system.NativeStart.main(Native Method)
06-02 12:17:43.132 E/AndroidRuntime( 1418): Caused by: java.lang.NullPointerException
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.content.res.AssetManager.getResourceTextArray(AssetManager.java:215)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.content.res.Resources.getTextArray(Resources.java:443)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.widget.ArrayAdapter.createFromResource(ArrayAdapter.java:430)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at com.myproject.cvd_2009.Questionnaire1.setSpinner(Questionnaire1.java:161)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at com.myproject.cvd_2009.Questionnaire1.onCreate(Questionnaire1.java:48)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.Activity.performCreate(Activity.java:5133)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2175)
06-02 12:17:43.132 E/AndroidRuntime( 1418):     ... 11 more
06-02 12:17:43.172 W/ActivityManager(  276):   Force finishing activity com.myproject.cvd_2009/.Questionnaire1
06-02 12:17:43.172 W/ActivityManager(  276):   Force finishing activity com.myproject.cvd_2009/.CvdFramingham
06-02 12:17:43.684 W/ActivityManager(  276): Activity pause timeout for ActivityRecord{41cf8380 u0 com.myproject.cvd_2009/.Questionnaire1}

解决方案(需要更多的解释,):

(1)我创建了一些Toast对象,但是我从来没有显示它们。删除未使用的Toast语句可能会有所帮助。

(2)在xml的布局中发现了一个嵌套属性的情况,所以我删除了嵌套属性:

 xmlns:android="http://schemas.android.com/apk/res/android"
这其实不是问题的关键
Intent i = new Intent(getResources().getString(R.string.path)+"ABOUT");
startActivity(i);

这只是让我困惑,因为当我注释掉startActivity应用程序从未失败,所以我认为这是由于我的意图定义。然而,我有上述两种方法的详细混合现在工作。我要感谢所有提到logcat的人——我现在已经设置好了,我将使用它进行调试。

试试这个

Intent i = new Intent();
i.setClassName(this, getResources().getString(R.string.path)+"ABOUT");
startActivity(i);

最新更新