Java Android Studio应用程序在我从Android Studio启动时工作,但在我从设备启动时不工作

Java Android Studio应用程序在我从Android Studio启动时工作,但在我从设备启动时不工作,java,android,nullpointerexception,Java,Android,Nullpointerexception,我是应用程序开发新手,目前为止,我的应用程序正在按预期工作,但只有当我从Android Studio在我的设备上启动它时。例如,我有一个实例变量,我在onCreate()方法中给它一个值1。当我在我的设备上从android studio启动应用程序时,它工作正常,变量值为1。但是,当我在不使用android studio的情况下从设备启动时,该变量的值为0。我还发现,在我知道应该有一个值的变量上,我会得到一堆NullPointerException,当从Android Studio启动时,它再次

我是应用程序开发新手,目前为止,我的应用程序正在按预期工作,但只有当我从Android Studio在我的设备上启动它时。例如,我有一个实例变量,我在onCreate()方法中给它一个值1。当我在我的设备上从android studio启动应用程序时,它工作正常,变量值为1。但是,当我在不使用android studio的情况下从设备启动时,该变量的值为0。我还发现,在我知道应该有一个值的变量上,我会得到一堆NullPointerException,当从Android Studio启动时,它再次起作用,但当从设备启动时,它不会起作用

这里是主要活动

public class MainActivity extends AppCompatActivity
{
private ArrayList<String> arrayList;
private ArrayList<ListItem> itemList;
private ArrayAdapter<String> adapter;
private EditText txtInput;
private int payRoll;
private String value;
private Intent mainToPayroll;
private int hours;
private int earnings;
private ArrayList<Integer> rollList;
private ArrayList<Integer> hourList;
private ArrayList<Integer> wageList;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    rollList = new ArrayList<>(0);
    hourList = new ArrayList<>(0);
    wageList = new ArrayList<>(0);
    payRoll = 1;

    Bundle bun = getIntent().getExtras();
    if(bun != null)
    {
        rollList = bun.getIntegerArrayList("rolls");
        hourList = bun.getIntegerArrayList("hours");
        wageList = bun.getIntegerArrayList("wages");
        payRoll = bun.getInt("roll");
    }

    ListView listView = (ListView) findViewById(R.id.listv);
    String[] items = {};
    arrayList = new ArrayList<>(Arrays.asList(items));
    itemList = new ArrayList<>(0);
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.txtitem, arrayList);
    listView.setAdapter(adapter);
    Button btAdd = (Button) findViewById(R.id.btadd);
    mainToPayroll = new Intent(this, PayrollActivity.class);

    if(rollList != null)
    {
        for (int i = 0; i < rollList.size(); i++) {
            ListItem newItem = new ListItem(rollList.get(i), hourList.get(i), wageList.get(i));
            arrayList.add(newItem.toString());
            itemList.add(newItem);
            adapter.notifyDataSetChanged();
        }


        rollList.clear();
        hourList.clear();
        wageList.clear();
    }

    btAdd.setOnClickListener(new View.OnClickListener()
    {
        public void onClick(View v)
        {
            ListItem newItem = new ListItem(payRoll, 0, 0);
            arrayList.add(newItem.toString());
            itemList.add(newItem);
            adapter.notifyDataSetChanged();
            payRoll++;
        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            value = (String)adapter.getItem(position);
            ListItem item = itemList.get(position);
            Bundle info = new Bundle();
            info.putString("val", value);
            info.putInt("hours", item.getHours());
            info.putInt("wage", item.getWages());
            info.putInt("pos", position);

            if(itemList.size() > 0)
            {
                for (ListItem items : itemList)
                {
                    rollList.add(items.getPayroll());
                    hourList.add(items.getHours());
                    wageList.add(items.getWages());
                }
            }

            info.putIntegerArrayList("rolls", rollList);
            info.putIntegerArrayList("hours", hourList);
            info.putIntegerArrayList("wages", wageList);
            info.putInt("roll", payRoll);
            info.putBoolean("rest", restore);


            mainToPayroll.putExtras(info);

            startActivity(mainToPayroll);
        }
    });
}
这是我为listview上的项目创建的类

public class ListItem
{
private int payroll;
private int hrs;
private int wages;

public ListItem(int roll, int hours, int wag)
{
    payroll = roll;
    hrs = hours;
    wages = wag;
}

public int getPayroll()
{
    return payroll;
}

public int getHours()
{
    return hrs;
}

public int getWages()
{
    return wages;
}

public void setPayroll(int roll)
{
    payroll = roll;
}

public void setHrs(int hours)
{
    hrs = hours;
}

public void setWages(int wage)
{
    wages = wage;
}

public String toString()
{
    return "Payroll " + payroll + "\n" + hrs + " hours\n$" + wages;
}

请尝试从设备上完全卸载应用程序,然后重试。这有时会解决问题。

我认为您的问题在于您的主要活动中的这段代码:

Bundle bun = getIntent().getExtras();
if(bun != null)
{
    rollList = bun.getIntegerArrayList("rolls");
    hourList = bun.getIntegerArrayList("hours");
    wageList = bun.getIntegerArrayList("wages");
    payRoll = bun.getInt("roll");
}
getIntent().getExtras()
可能会返回一个非null的
Bundle
对象,但是Bundle可能没有您试图访问的密钥,在这种情况下,
int
的所有实例变量都将设置为null或零

您只需检查bundle中是否存在某个特定的键,并仅在该键存在时设置变量,就可以解决这个问题


或者,如果变量从包中加载后为空,则可以初始化变量。

是否使用Instant Run?向我们展示一些代码,如果没有它,我们将无法帮助您是的,我使用Instant Run。我已经尝试过,但没有成功。我会继续尝试,直到它成功,或者我找到另一个解决方案。感谢您的回复。感谢您的回复,这似乎已经解决了这个问题,并且当通过android studio和我的设备启动时,该应用程序现在可以正常工作。这真的很有帮助。
Bundle bun = getIntent().getExtras();
if(bun != null)
{
    rollList = bun.getIntegerArrayList("rolls");
    hourList = bun.getIntegerArrayList("hours");
    wageList = bun.getIntegerArrayList("wages");
    payRoll = bun.getInt("roll");
}