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