Android

时间:2015-09-09 14:25:45

标签: java android numberformatexception

我正在制作一个应用程序,用户可以在其中添加商店部门,并为这些部门添加部门所在城市的能力。

当我尝试为某个部门添加城市时,我继续获取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的任何想法? 非常感谢任何帮助。

提前致谢。

3 个答案:

答案 0 :(得分:2)

  

有关如何删除NumberFormatException的任何想法?

该异常是由第45行vestiging_list中的Long.parseLong引起的。原因是groupid,在null中就是Intent。由于您没有填写用于启动vestiging_list的{​​{1}}对象。

E.g。

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很长。

答案 1 :(得分:0)

我认为问题在以下几行:

 int[] to = new int [] { R.id.vesID, R.id.vesName};

“R.id.vesName”的类型是什么?它应该是整数。

答案 2 :(得分:0)

从您提供的堆栈跟踪中,我可以假设groupId为null:

<?php
$con = mysql_connect("localhost","xxxx","xxxx");
mysql_select_db("test", $con);
$url = "https://bo-api.xxxx.io/v1/be/client/2015-07-01";
$json = file_get_contents($url);
$result = json_decode($json,true);
foreach($result as $key => $value)
{
    if($value)
    {
        mysql_query("INSERT INTO apitest(c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19)
        VALUES ($value->c1,
        $value->c2,
        $value->c3,
        $value->c4,
        $value->c5,
        $value->c6,
        $value->c7,
        $value->c8,
        $value->c9,
        $value->c10,
        $value->c11,
        $value->c12,
        $value->c13,
        $value->c14,
        $value->c15,
        $value->c16,
        $value->c17,
        $value->c18,
        $value->c19");
    }
    mysql_close($con);
}
?>

根据Long的Javadoc Long#parseLong(String)如果参数不是可解析的Long,则抛出异常,这是null的情况。

检查groupid是否为null,否则您有错误。如果它可以为null,则检查它是否等于null,然后将long_id设置为适当的值,例如0或-1。