Android 中的 NumberFormatException
NumberFormatException in Android
我正在制作一个应用程序,用户可以在其中添加商店部门,并为这些部门添加部门所在城市的能力。
我在尝试为部门添加城市时不断收到 NumberFormatException:
Caused by: java.lang.NumberFormatException: Invalid long: "null"
at java.lang.Long.invalidLong(Long.java:124)
at java.lang.Long.parseLong(Long.java:345)
at java.lang.Long.parseLong(Long.java:321)
at org.hello.addgroups.vestiging_list.onCreate(vestiging_list.java:45)
在此之后,应用程序崩溃了,但是当我重新启动应用程序时,值被添加到列表中。
这些是我的 类:
Add_vestiging.java:
public class Add_vestiging extends Activity implements View.OnClickListener{
EditText et,hiddenet;
Button add_bt, cancel_btn;
SQLController dbcon;
Intent i;
Long groupd;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_new_vestiging);
et = (EditText)findViewById(R.id.vestigingName);
add_bt = (Button) findViewById(R.id.addBtn);
cancel_btn = (Button) findViewById(R.id.cancelBtn);
dbcon = new SQLController(this);
try {
dbcon.open();
} catch(SQLException e) {
e.printStackTrace();
}
i = getIntent();
String id = i.getStringExtra("groupID");
groupd = Long.parseLong(id);
add_bt.setOnClickListener(this);
cancel_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.addBtn:
String name = et.getText().toString();
try {
dbcon.insertVestiging(groupd, name);
}catch(SQLiteException e) {
e.printStackTrace();
}
Intent main = new Intent(Add_vestiging.this, vestiging_list.class);
startActivity(main);
break;
case R.id.cancelBtn:
super.finish();
break;
}
}
}
vestiging_list.java:
public class vestiging_list extends Activity {
ListView lv;
SQLController dbcon;
TextView title;
Button addves;
Long long_id;
String groupid;
Intent add_ves;
String groupname;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vestiging_list);
dbcon = new SQLController(this);
title = (TextView) findViewById(R.id.vestitel);
try {
dbcon.open();
} catch (SQLException e) {
e.printStackTrace();
}
add_ves = getIntent();
groupid = add_ves.getStringExtra("groupID");
groupname = add_ves.getStringExtra("groupName");
title.setText(groupname);
long_id = Long.parseLong(groupid);
addves = (Button)findViewById(R.id.addves_bt_id);
lv = (ListView)findViewById(R.id.vestigingList_id);
addves.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add_ves = new Intent(getApplicationContext(), Add_vestiging.class);
add_ves.putExtra("groupID", groupid);
startActivity(add_ves);
}
});
Cursor cursor = dbcon.readVestigingen(long_id);
String[] from = new String[] { GroupDatabaseHelper.V_ID, GroupDatabaseHelper.VESNAME};
int[] to = new int [] { R.id.vesID, R.id.vesName};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(vestiging_list.this, R.layout.vestiging_single_row_item, cursor, from, to,1);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
}
关于如何删除 NumberFormatException 的任何想法?
非常感谢任何帮助。
提前致谢。
我认为问题出在以下行中:
int[] to = new int [] { R.id.vesID, R.id.vesName};
"R.id.vesName" 的类型是什么?。它应该是整数。
Any ideas on how to remove the NumberFormatException?
异常是由第 45 行 vestiging_list
中的 Long.parseLong 引起的。原因是 groupid
,在您的例子中是 null
。由于您没有填写 Intent
对象,因此您用于启动 vestiging_list
.
例如
case R.id.addBtn:
String name = et.getText().toString();
try {
dbcon.insertVestiging(groupd, name);
}catch(SQLiteException e) {
e.printStackTrace();
}
Intent main = new Intent(Add_vestiging.this, vestiging_list.class);
main.putExtra("groupID", String.valueOf(groupd));
startActivity(main);
break;
假设 groupd
是多头。
根据您提供的堆栈跟踪,我可以假设 groupId 为空:
groupid = add_ves.getStringExtra("groupID");
...
long_id = Long.parseLong(groupid);
根据 Long 的 Javadoc 如果参数不是可解析的 Long,Long#parseLong(String) 会抛出异常,这就是 null 的情况。
检查 groupid 是否可以为空,否则你有错误。如果它可以为 null,则检查它是否等于 null,然后将 long_id 设置为适当的值,例如0 或 -1。
在我看来,您正在创建 Intent,但并未将信息传递给 Intent。 class 对当前 class 的引用只是一个跟踪,不包含信息。
当您在 Add_vestiging class 中创建 Intent 时,在 onClick 中执行类似 main.putExtra("groupID", id).
的操作
看起来你把它放在了 SQLController 中,所以你也可以尝试传递它。
我正在制作一个应用程序,用户可以在其中添加商店部门,并为这些部门添加部门所在城市的能力。
我在尝试为部门添加城市时不断收到 NumberFormatException:
Caused by: java.lang.NumberFormatException: Invalid long: "null"
at java.lang.Long.invalidLong(Long.java:124)
at java.lang.Long.parseLong(Long.java:345)
at java.lang.Long.parseLong(Long.java:321)
at org.hello.addgroups.vestiging_list.onCreate(vestiging_list.java:45)
在此之后,应用程序崩溃了,但是当我重新启动应用程序时,值被添加到列表中。
这些是我的 类: Add_vestiging.java:
public class Add_vestiging extends Activity implements View.OnClickListener{
EditText et,hiddenet;
Button add_bt, cancel_btn;
SQLController dbcon;
Intent i;
Long groupd;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.add_new_vestiging);
et = (EditText)findViewById(R.id.vestigingName);
add_bt = (Button) findViewById(R.id.addBtn);
cancel_btn = (Button) findViewById(R.id.cancelBtn);
dbcon = new SQLController(this);
try {
dbcon.open();
} catch(SQLException e) {
e.printStackTrace();
}
i = getIntent();
String id = i.getStringExtra("groupID");
groupd = Long.parseLong(id);
add_bt.setOnClickListener(this);
cancel_btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.addBtn:
String name = et.getText().toString();
try {
dbcon.insertVestiging(groupd, name);
}catch(SQLiteException e) {
e.printStackTrace();
}
Intent main = new Intent(Add_vestiging.this, vestiging_list.class);
startActivity(main);
break;
case R.id.cancelBtn:
super.finish();
break;
}
}
}
vestiging_list.java:
public class vestiging_list extends Activity {
ListView lv;
SQLController dbcon;
TextView title;
Button addves;
Long long_id;
String groupid;
Intent add_ves;
String groupname;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.vestiging_list);
dbcon = new SQLController(this);
title = (TextView) findViewById(R.id.vestitel);
try {
dbcon.open();
} catch (SQLException e) {
e.printStackTrace();
}
add_ves = getIntent();
groupid = add_ves.getStringExtra("groupID");
groupname = add_ves.getStringExtra("groupName");
title.setText(groupname);
long_id = Long.parseLong(groupid);
addves = (Button)findViewById(R.id.addves_bt_id);
lv = (ListView)findViewById(R.id.vestigingList_id);
addves.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
add_ves = new Intent(getApplicationContext(), Add_vestiging.class);
add_ves.putExtra("groupID", groupid);
startActivity(add_ves);
}
});
Cursor cursor = dbcon.readVestigingen(long_id);
String[] from = new String[] { GroupDatabaseHelper.V_ID, GroupDatabaseHelper.VESNAME};
int[] to = new int [] { R.id.vesID, R.id.vesName};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(vestiging_list.this, R.layout.vestiging_single_row_item, cursor, from, to,1);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
}
关于如何删除 NumberFormatException 的任何想法? 非常感谢任何帮助。
提前致谢。
我认为问题出在以下行中:
int[] to = new int [] { R.id.vesID, R.id.vesName};
"R.id.vesName" 的类型是什么?。它应该是整数。
Any ideas on how to remove the NumberFormatException?
异常是由第 45 行 vestiging_list
中的 Long.parseLong 引起的。原因是 groupid
,在您的例子中是 null
。由于您没有填写 Intent
对象,因此您用于启动 vestiging_list
.
例如
case R.id.addBtn:
String name = et.getText().toString();
try {
dbcon.insertVestiging(groupd, name);
}catch(SQLiteException e) {
e.printStackTrace();
}
Intent main = new Intent(Add_vestiging.this, vestiging_list.class);
main.putExtra("groupID", String.valueOf(groupd));
startActivity(main);
break;
假设 groupd
是多头。
根据您提供的堆栈跟踪,我可以假设 groupId 为空:
groupid = add_ves.getStringExtra("groupID");
...
long_id = Long.parseLong(groupid);
根据 Long 的 Javadoc 如果参数不是可解析的 Long,Long#parseLong(String) 会抛出异常,这就是 null 的情况。
检查 groupid 是否可以为空,否则你有错误。如果它可以为 null,则检查它是否等于 null,然后将 long_id 设置为适当的值,例如0 或 -1。
在我看来,您正在创建 Intent,但并未将信息传递给 Intent。 class 对当前 class 的引用只是一个跟踪,不包含信息。
当您在 Add_vestiging class 中创建 Intent 时,在 onClick 中执行类似 main.putExtra("groupID", id).
的操作看起来你把它放在了 SQLController 中,所以你也可以尝试传递它。