java-调用 getStringArray 后 android 程序崩溃

问题描述

调用 getStringArray 后 android 程序崩溃

程序出现了下面的错误,在 emulator中奔溃了。现在还不确定什么问题。
Logcat:

E/AndroidRuntime( 1928): FATAL EXCEPTION: main
E/AndroidRuntime( 1928): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.packtpub.kitchendroid/com.packtpub.kitchendroid.QuestionActivity}: android.content.res.Resources$NotFoundException: String array resource ID #0x0

Java-CODE:

 package com.packtpub.kitchendroid;

import android.app.Activity;
import android.os.Bundle;
import android.content.res.Resources;
import android.widget.Button;
import android.widget.TextView;
import android.view.ViewGroup;

public class QuestionActivity extends Activity
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    initQuestionScreen();

    }
    private Button[] buttons;

    private static int getQuestionID(final Resources res, final int index) {
        final String[] questions = res.getStringArray(R.array.questions);
        return res.getIdentifier(questions[index],
                     "array",
                     "com.packpub.kitchenroid");
    }

    private int getQuestionIndex() {
        return getIntent().getIntExtra("KitchenDroid.Question", 0);
    }

    private void initQuestionScreen() {
        TextView question = (TextView)findViewById(R.id.question);
        ViewGroup answers = (ViewGroup)findViewById(R.id.answers);

            Resources resources = getResources();
        int questionID = getQuestionID(resources, getQuestionIndex());
            //Crashes after below line of code
        String[] quesionData = resources.getStringArray(questionID);

        // question.setText(quesionData[0]);
            // int answerCount = quesionData.length - 1;
        // buttons = new Button[answerCount];

        // for(int i = 0; i < answerCount; i++) {
        //     String answer = quesionData[i + 1];
        //     Button button = new Button(this);
        //     button.setText(answer);
        //     answers.addView(button);
        //     buttons[i] = button;
        // }
    }
}

strings.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">QuestionActivity</string>

    <string-array name="questions">
      <item>vegetarian</item>
      <item>size</item>
    </string-array>

    <string-array name="vegetarian">
      <item>Are you a Vegetarian?</item>
      <item>Yes</item>
      <item>No</item>
      <item>I'm a vegan</item>
    </string-array>

    <string-array name="size">
      <item>How much do you feel like eating?</item>
      <item>A large meal</item>
      <item>Just a nice single serving of food</item>
      <item>Some finger foods</item>
      <item>Just a snack</item>
    </string-array>
</resources>

main.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="wrap_content"
    >
<TextView
    android:id="@+id/question"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Please wait..."
    />
<LinearLayout
    android:id="@+id/answers"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >
<Button
    android:id="@+id/yes"
    android:text="Yes!"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/no"
    android:text="No!"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<Button
    android:id="@+id/maybe"
    android:text="Maybe?"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

<Button
    android:id="@+id/skip"
    android:layout_marginTop="12sp"
    android:text="Skip Question"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

<Button
    android:id="@+id/view"
    android:layout_marginTop="12sp"
    android:text="Feed Me!"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

</LinearLayout>

package com.packtpub.kitchendroid;

public final class R {
    public static final class array {
        public static final int questions=0x7f050000;
        public static final int size=0x7f050002;
        public static final int vegetarian=0x7f050001;
    }
    public static final class attr {
    }
    public static final class dimen {
        public static final int half_width=0x7f030000;
    }
    public static final class id {
        public static final int answers=0x7f060001;
        public static final int maybe=0x7f060004;
        public static final int no=0x7f060003;
        public static final int question=0x7f060000;
        public static final int skip=0x7f060005;
        public static final int view=0x7f060006;
        public static final int yes=0x7f060002;
    }
    public static final class layout {
        public static final int main=0x7f020000;
    }
    public static final class string {
        public static final int app_name=0x7f040000;
    }
}

解决方案

etIntent().getIntExtra("KitchenDroid.Question", 0); 没有取到值,导致无法找到resouresId

时间: 2024-09-14 03:35:34

java-调用 getStringArray 后 android 程序崩溃的相关文章

布局-android 将自定义组件添加到xml后,程序崩溃

问题描述 android 将自定义组件添加到xml后,程序崩溃 activity_main中的代码是这样的 xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:id

求助!Java调用批处理文件后无法执行

问题描述 求助!Java调用批处理文件后无法执行 我想用Java调用批处理打开.exe安装包,但是安装包无法打开或者说直接跳过了打开 上面是我的Java代码 执行后没有打开.exe文件!但是我单独打开批处理文件就完全没问题 这是我的批处理文档! 哪位大神帮帮忙啊!!!! 解决方案 java 执行批处理文件window下java执行批处理文件 解决方案二: 既然是执行 cmd ,你的BAT里为什么还要pause? 然后,你的 command = "cmd /c zidong.bat";就

android程序崩溃后重启

有时候由于测试不充分或者程序潜在的问题而导致程序异常崩溃,这个是令人无法接受的,在android中怎样捕获程序的异常崩溃,然后进行一些必要的处理或重新启动 应用这个问题困恼了我很久,今天终于解决了该问题,写篇文章记录一下. 首先捕获程序崩溃的异常就必须了解一下java中UncaughtExceptionHandler这个接口,android沿用了此接口,在android API中: 通过实现此接口,能够处理线程被一个无法捕捉的异常所终止的情况.如上所述的情况,handler将会报告线程终止和不明

Java调用secureCRT后怎么让它跑VBS里面的程序?

问题描述 我要用Java写一个界面,可以打开secureCRT,并自动执行secureCRT,可是现在只能用Processprocess=Runtime.getRuntime().exec("c:/secureCRT.exe/s10.9.45.144");连接上主机,接下来还有命令怎么执行?或者怎么才能让secureCRT自动加载VBS脚本运行该脚本 解决方案

Ubuntu下Java调用IKAnalyzer中文分词程序失效

庖丁解牛等其它中文分词程序比较后发现,IKAnalyzer的中文分词效果好,程序调用简单.所以采用IKAnalyzer作为我们中文分词的程序. 调用IKAnalyzer来进行中文分词的代码十分简单:  代码如下 复制代码 /** * 传入一个中文语句,返回一个List列表,列表中的每一个元素是一个String类型的分词之后的中文词组 */ public static ArrayList<String> testJe(String testString) throws Exception {  

关于调用DLL后的程序打包的问题

问题描述 在写一个程序需要调用SharpZipLib来实现文件的压缩和解压缩功能..调用倒是没有问题..我是通过添加了对SharpZipLib.dll的引用以后,在用using来调namespace,然后就能用dll里面的类了.这样操作的话,编译后vs会把dll也同时放到输出目录里面,每次运行编译的可执行文件时都需要保证同一目录下有相应的dll文件.想问下各位高人们..有没有办法让vs编译生成单一的可执行文件呢..就是把我调用的dll也一起打包到可执行文件里面..?我试过把dll文件加入工程~~

android-Android程序崩溃,求大神帮忙看看这是什么原因

问题描述 Android程序崩溃,求大神帮忙看看这是什么原因 如题,代码中没错误,但是每次运行到那个方法就自动退出了.这是Logcat中的error列表,谁知道是什么原因? 04-22 15:29:54.788: E/dalvikvm(3610): threadid=11: created from interp,name=Thread-3687 04-22 15:29:54.798: E/dalvikvm(3610): threadid=11: calling run(),name=Threa

代码-用java语言编写android程序,实现调用usb打印机图片功能

问题描述 用java语言编写android程序,实现调用usb打印机图片功能 用java语言编写android程序,实现调用usb打印机图片功能,打印机不能联网,只是用代码去调用usb接口的打印机.急需实现此功能,请大神们帮帮忙 解决方案 http://blog.csdn.net/kangear/article/details/18141741 解决方案二: http://www.360doc.com/content/13/0906/12/11482448_312596809.shtml

sqlite-运行 SQLite 数据库后程序崩溃

问题描述 运行 SQLite 数据库后程序崩溃 我设计的是查询数据库后下面的程序段返回一个数组.但是现在运行下面的程序时,奔溃了 //info 是类型数据中对象的名字 info.open(); String[] data = info.queryAll(); info.close(); 数据库代码部分,我想检索某一列中所有数据库的行 public String[] queryAll() { String[] columns = new String[] { KEY_NAME }; Cursor