【问题标题】:Unfortunately, [APP] has stopped! WHAT am i doing wrong? [closed]不幸的是,[APP]已停止!我究竟做错了什么? [关闭]
【发布时间】:2014-08-20 15:27:30
【问题描述】:

这是我在 StackExchange 的第一篇文章。 我是一个非常初学者的 Android 开发人员。我正在制作一个用于保存数组(列表)的应用程序。但不幸的是,当我运行我的应用程序时,它显示{不幸的是,商店已停止!}。我对这个错误非常熟悉,而且很多时候我也能够通过它。但这一次,我无法弄清楚我做错了什么。我的代码看起来很完美,但不知何故一直显示该错误。 我在下面粘贴我的java代码。请仔细阅读我的代码并指出我的错误!请~!

AddItem.java

package com.rcube.shop;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class AddItem extends Activity{
SharedPreferences store = PreferenceManager.getDefaultSharedPreferences(getApplication());
SharedPreferences.Editor edit = store.edit();
ArrayList<String> itemarray = new ArrayList<String>();
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.add_item);
    Button addnewitem = (Button) findViewById(R.id.addnewitem);
    final EditText getitemname = (EditText)findViewById(R.id.getitem);

    addnewitem.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            String newitemname = getitemname.getText().toString();
            if(newitemname.length()!=0){
                itemarray.add(newitemname);
                Set<String> itemset = new HashSet<String>(itemarray);
                edit.putStringSet("items_set", itemset);
                edit.commit();
            }else{
                Toast.makeText(AddItem.this, "Write Item name before submitting!", Toast.LENGTH_LONG).show();               
            }
        }
    });


}


}

请告诉我我做错了什么。而且我还在 Android Manifest 中添加了新的 android 活动,所以这个错误不是因为这个。 再次感谢! 和平~!

【问题讨论】:

  • 我认为您的 SharedPreferences 和 Editor 分配得太早了。
  • 将您的手机置于调试模式。当它崩溃时,它会指出导致问题的行。确保当时正在调试应用程序(在“设备”列表中旁边有一个绿色的小错误)

标签: java android arrays android-activity sharedpreferences


【解决方案1】:

把这两行放在onCreate()的findViewById后面,就可以使用context了。

SharedPreferences store = PreferenceManager.getDefaultSharedPreferences(getApplication());
SharedPreferences.Editor edit = store.edit();

【讨论】:

    【解决方案2】:

    好像你在getApplicationContect()获得NPE

    把这个放在onCreatesetContentView之后

    SharedPreferences store = PreferenceManager.getDefaultSharedPreferences(getApplication());
    SharedPreferences.Editor edit = store.edit();
    

    在那之前你不会得到上下文。

    希望这会有所帮助。

    【讨论】:

    • 谢谢伙计...!它奏效了......真的很感激!但是你能解释一下我做错了什么吗?以及为什么一开始没有用!
    • @user3789667 setContentView 呈现您的 xml,之后您可以获取应用程序上下文。您试图在 setContentView 之前引用应用程序上下文。所以它抛出了空指针异常。参考更多here :)
    • @user3789667 如果问题得到解决,则将答案标记为正确 :) 所以它会从未回答列表中删除
    • 还有一件事……每次我点击添加新按钮时,它都会重置我的数组列表!我想将旧字符串保留在数组中,但是每当我添加新项目时,它都会重置我的数组列表,然后它只显示新项目!此错误仅在此代码中,我已查看其他代码。
    • 将不得不检查。明天从办公室开始。现在在移动设备上。
    猜你喜欢
    • 2014-09-13
    • 2013-08-06
    • 1970-01-01
    • 2015-01-10
    • 2014-05-14
    • 2016-07-18
    • 2011-06-28
    • 2019-12-23
    • 2014-06-15
    相关资源
    最近更新 更多