2015-09-09 2 views
0

Я делаю приложение, в котором пользователь может добавлять отделы магазина, а для этих отделов - добавлять города где расположены отделы.NumberFormatException в 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? Любая помощь очень ценится.

Заранее спасибо.

+1

Отладка и проверка того, что передается как параметр в методе parseLong(). –

+0

Правильный вопрос: как удалить нуль в этом месте. –

ответ

2

Любые идеи о том, как удалить исключение NumberFormatException?

Исключение вызвано Long.parseLong в vestiging_list в строке 45. Причина в том, что groupid, в вашем случае в null. Поскольку вы не заполнили объект Intent, который вы использовали для запуска vestiging_list.

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 является длинным.

+0

Отлично работает, спасибо за четкий ответ! – brasay

+0

приветствуются – Blackbelt

0

Я думаю, что проблема заключается в следующей строке:

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

Что такое тип "R.id.vesName"?. Он должен быть целым.

0

Из трассировки стеки, что вы предоставили, я могу предположить, что идентификатор_группы равны нуль:

groupid = add_ves.getStringExtra("groupID"); 
... 
long_id = Long.parseLong(groupid); 

В соответствии с Лонгом Javadoc Long # parseLong (String) генерирует исключение, если аргумент не является интерпретируемым Long, sth, что имеет место с нулем.

Проверьте, не является ли groupid пустым, если у вас есть ошибка. Если он может быть нулевым, то проверьте, равен ли он нулю, а затем установите long_id на соответствующее значение, например. 0 или -1.

0

Мне кажется, что вы создаете намерение, но вы не передаете информацию намерению. Ссылка класса на текущий класс - это просто трассировка и не включает в себя информацию.

Когда вы делаете намерение в классе Add_vestiging, в onClick делайте что-то вроде main.putExtra («groupID», id).

Похоже, вы помещаете его в SQLController, так что вы также можете попробовать передать это.

Смежные вопросы