Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android字符串数组崩溃_Java_Android_Nullpointerexception_Arrays_Runtimeexception - Fatal编程技术网

Java Android字符串数组崩溃

Java Android字符串数组崩溃,java,android,nullpointerexception,arrays,runtimeexception,Java,Android,Nullpointerexception,Arrays,Runtimeexception,我的Android应用程序有一个非常奇怪的问题。每次我向strings.xml(或res/values/中的任何其他文件)添加字符串数组时,我的程序在启动时崩溃。我绝对肯定地知道,这正是使它崩溃的原因(因为无论何时我移除它,它都可以正常工作)。无论如何,下面是导致崩溃的XML代码: <string-array name="main_list"> <item>Collections</item> <item>Reque

我的Android应用程序有一个非常奇怪的问题。每次我向strings.xml(或res/values/中的任何其他文件)添加字符串数组时,我的程序在启动时崩溃。我绝对肯定地知道,这正是使它崩溃的原因(因为无论何时我移除它,它都可以正常工作)。无论如何,下面是导致崩溃的XML代码:

<string-array name="main_list">
        <item>Collections</item>
        <item>Requests</item>
        <item>Forums</item>
</string-array>
如果有人有任何想法,请分享。我已经在这方面工作了很长时间,我相信这是一个愚蠢的错误,但我只需要另一双眼睛。我愿意尝试任何可能的解决办法

编辑:

我删除了对字符串数组资源的所有引用,仅包括导致崩溃的资源。我没有在任何地方引用它,所以这并不是问题的根源

根据要求,这是我的onCreate for“login”,尽管我很久没有接触过该代码,而且它一直都很有效:

public void onCreate(Bundle savedInstanceState)
    {
    Log.d("Login","onCreate called");
        super.onCreate(savedInstanceState);
    Interactor.create(this);
        setContentView(R.layout.login);
    ((EditText)findViewById(R.id.username)).setText(Interactor.getDB().getSetting("username"));
        EditText pwd = (EditText)findViewById(R.id.password);
    pwd.setText(Interactor.getDB().getSetting("password"));
    if (Interactor.getDB().getSetting("save_login").equals("yes"))
        ((CheckBox)findViewById(R.id.remember_login)).setChecked(true);
        // Treat "Send" soft-button on keyboard as a button click
        pwd.setOnEditorActionListener(new android.widget.TextView.OnEditorActionListener()
                {
                    public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
                    {
                        if (actionId == EditorInfo.IME_ACTION_SEND)
                            ((Button)findViewById(R.id.login_btn)).performClick();
                        return true;
                    }
                });
    }
通过将资源包含在res/values中而抛出异常,即使从未引用过它。这就是为什么我觉得很奇怪

编辑的编辑:


乔恩·斯基特可能有什么发现。在包含字符串数组资源并注释掉login的onCreate的第32行(正如我在上面的注释中所说的)时,应用程序再次工作。那么添加字符串数组会以某种方式破坏这条线吗?任何关于为什么添加字符串数组资源的帮助都会破坏这一点,但它在不添加资源的情况下100%工作?

字符串数组肯定没有问题。问题在于访问字符串的代码中

像这样试试

Resources res = getResources();
String[] list = res.getStringArray(R.array.main_list);

好吧,这是一篇5年前的文章,但我遇到了完全相同的问题(Android Studio 2.1.3)。对我来说,第一个字符串数组工作得很好,但每当我试图在同一个文件(strings.xml)中添加第二个字符串数组时,我的应用程序就会崩溃。所以我在做测试,我注意到如果你对字符串资源进行更改,更改会立即出现在设计上,但是如果你运行应用程序,它会保持不变。我认为这和缓存有关,所以我只是关闭和打开Android STUDIO,令人惊讶的是,它确实起了作用,至少对我来说是这样。如果您想要比手动关闭和打开更快的东西,这里是最好的解决方案:在项目中单击文件->使缓存无效/重新启动->只需重新启动即可

警察局。当我发现这个问题时,我正在使用Spinners,下面是我的一些代码:

“strings.xml”:


马斯科塔米亚酒店
马斯科塔登记处
领事社
佩罗
加图
科科德里洛
犰狳
甘索
科雷尔
纳达尔
多米尔
莫尔德埃尔休索酒店
佩尔斯圭尔·加托
“registerMascota.java”(仅onCreate方法,这是我在微调器中使用字符串数组的地方):

创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u Registrator\u mascota);
//拉扎纺纱厂
微调器spinneRaza=(微调器)findViewById(R.id.raza);
ArrayAdapterAz=ArrayAdapter.createFromResource(此,
R.array.raza_数组,android.R.layout.simple_微调器_项);
adapteRaz.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
spinneRaza.setAdapter(adapteRaz);
spinneRaza.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共位置(AdapterView父项、视图、整数位置、长id){
Toast.makeText(getBaseContext(),parent.getItemAtPosition(pos)+“selectionado”,Toast.LENGTH_LONG.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
//纺纱机
Spinner spinnerPas=(Spinner)findViewById(R.id.pasatiempo);
ArrayAdapter adapterPas=ArrayAdapter.createFromResource(此,
R.array.pasatiempo_数组,android.R.layout.simple_微调器_项);
adapterPas.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
喷丝头座接合器(接合器座);
spinnerPas.setOnItemSelectedListener(新AdapterView.OnItemSelectedListener()){
@凌驾
已选择公共位置(AdapterView父项、视图、整数位置、长id){
Toast.makeText(getBaseContext(),parent.getItemAtPosition(pos)+“selectionado”,Toast.LENGTH_LONG.show();
}
@凌驾
未选择公共无效(AdapterView AdapterView){
}
});
}

我也遇到了同样的问题,备份不好。只需清除应用程序的数据(卸载将不起作用)

可能不是数组而是引用它的部分导致了问题?我可以看看类的
onCreate
方法
org.myfavs.droid.login
?请阅读我对初始问题的编辑,这是login.java的第32行吗?我假设您正在使用eclipse。这听起来可能太明显了,但您是否进行了干净的构建并强制eclipse刷新R和所有资产?我发现,有时如果我有很多res文件,索引似乎不再与实际的资产文件匹配,因此我的id查找并不总是匹配。就像在本例中一样,我打赌EditText Id将被更改为不同的值,但是R或您的资产存档没有得到更新。
public void onCreate(Bundle savedInstanceState)
    {
    Log.d("Login","onCreate called");
        super.onCreate(savedInstanceState);
    Interactor.create(this);
        setContentView(R.layout.login);
    ((EditText)findViewById(R.id.username)).setText(Interactor.getDB().getSetting("username"));
        EditText pwd = (EditText)findViewById(R.id.password);
    pwd.setText(Interactor.getDB().getSetting("password"));
    if (Interactor.getDB().getSetting("save_login").equals("yes"))
        ((CheckBox)findViewById(R.id.remember_login)).setChecked(true);
        // Treat "Send" soft-button on keyboard as a button click
        pwd.setOnEditorActionListener(new android.widget.TextView.OnEditorActionListener()
                {
                    public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
                    {
                        if (actionId == EditorInfo.IME_ACTION_SEND)
                            ((Button)findViewById(R.id.login_btn)).performClick();
                        return true;
                    }
                });
    }
Resources res = getResources();
String[] list = res.getStringArray(R.array.main_list);
<resources>
   <string name="app_name">Mascota Mia</string>
   <string name="registrar_mascota">Registrar Mascota</string>
   <string name="agendar_consulta">Agendar Consulta</string>
   <string-array name="raza_array">
      <item>Perro</item>
      <item>Gato</item>
      <item>Cocodrilo</item>
      <item>Armadillo</item>
      <item>Ganso</item>
   </string-array>
   <string-array name="pasatiempo_array">
      <item>Correr</item>
      <item>Nadar</item>
      <item>Dormir</item>
      <item>Morder el hueso</item>
      <item>Perseguir al gato</item>
   </string-array>
</resources>
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_registrar_mascota);


   //Spinner para la raza
    Spinner spinneRaza = (Spinner) findViewById(R.id.raza);
    ArrayAdapter<CharSequence>adapteRaz = ArrayAdapter.createFromResource(this,
            R.array.raza_array, android.R.layout.simple_spinner_item);
    adapteRaz.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinneRaza.setAdapter(adapteRaz);
    spinneRaza.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

            Toast.makeText(getBaseContext(), parent.getItemAtPosition(pos)+" seleccionado", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }

    });


    //Spinner para los pasatiempos
    Spinner spinnerPas = (Spinner) findViewById(R.id.pasatiempo);
    ArrayAdapter<CharSequence> adapterPas = ArrayAdapter.createFromResource(this,
            R.array.pasatiempo_array, android.R.layout.simple_spinner_item);
    adapterPas.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinnerPas.setAdapter(adapterPas);
    spinnerPas.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {

            Toast.makeText(getBaseContext(), parent.getItemAtPosition(pos)+" seleccionado", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onNothingSelected(AdapterView<?> adapterView) {

        }

    });

}