2016-02-12 2 views
0

У меня возникли проблемы с сканером штрих-кода ZXing в приложении для Android. Вчера я задал вопрос here, который объясняет ошибку нулевого указателя, которую я имел. Проблема была решена и просто показала, что курсор не возвращал какую-либо информацию.ZXing Scanner Поиск результатов

Мои проблемы в том, что я знаю, что запрос правильный, и я знаю, что код правильный, потому что я проверил его без сканера отдельно, и все работает нормально. Возможно ли, что я звоню в базу данных неправильно в намерении сканера штрих-кода или есть определенный способ, которым я должен это делать?

Любая помощь или руководство будет замечательным!

onActivity Результат

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (requestCode == 0) { 
     if (resultCode == RESULT_OK) { 
      //get the extras that are returned from the intent 
      barcode_number = intent.getStringExtra("SCAN_RESULT"); 
      String bNumber = barcode_number.toString(); 

      //Code to add scanned item to DB, needs barcode data before can be ruin 
      final Cursor barInformation = adapter.barcodeInfo(barcode_number); 

      barInformation.moveToFirst(); 
      String itemName = barInformation.getString(barInformation.getColumnIndex("barcode_item_name")); 
      Toast toast = Toast.makeText(this, "Barcode Number:" + itemName ,Toast.LENGTH_SHORT); 
      toast.show(); 
     } 
    } 
} 

Запрос

public Cursor barcodeInfo(String number){ 

// Safe check to make sure db and number is not null 
if(db == null || number == null){ 

    return null; 
} 

return db.rawQuery("select _id, barcode_item_name, barcode_measurement, barcode_unit from barcode where barcode_number = ?", new String[]{number}); 
} 

Ошибка

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.Cursor android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[])' on a null object reference 
02-12 11:15:07.544 12808-12808/com.example.rory.prototypev2 E/AndroidRuntime:  at com.example.rory.prototypev2.DBMain.barcodeInfo(DBMain.java:437) 
02-12 11:15:07.544 12808-12808/com.example.rory.prototypev2 E/AndroidRuntime:  at com.example.rory.prototypev2.scanner.onActivityResult(scanner.java:77) 
+0

Возможный дубликат [Что является исключение нулевого указателя, и как это исправить?] (Http://stackoverflow.com/questions/218384/what-is-a-null-pointer-exception- и-how-do-i-fix-it) –

+0

Я знаю, что такое пустой указатель, я объяснил в своем вопросе, что существует нулевой указатель. Я не ищу кого-либо, чтобы решить указатель NULL, я прошу проверить, правильно ли я вызываю методы из функции Zxing onActivityResult. – JJSmith

ответ

0

Я исправил проблему. Моя проблема была в том, что я не открывал базу данных до того, как я вызывал функции, и, таким образом, функция была нулевым объектом. Правильный код приведен ниже.

  adapter.open(); // I was missing this line 
      Cursor c = adapter.barcodeInfo(bNumber); 
      c.moveToPosition(-1); 
      while(c.moveToNext()) 
      { 
       name = c.getString(c.getColumnIndex("barcode_item_name")); 
       measurement = c.getInt(c.getColumnIndex("barcode_measurement")); 
       unit = c.getString(c.getColumnIndex("barcode_unit")); 

       Toast toast = Toast.makeText(this, "Adding" + name + "to Kitchen", Toast.LENGTH_SHORT); 
       toast.show(); 
      } 
0

Попробуйте, как это

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    switch (requestCode) { 
     case IntentIntegrator.REQUEST_CODE: { 
      if (resultCode != RESULT_CANCELED) { 
       IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
       String strData = scanResult.getContents(); // use this 
      } else { 
       Toast.makeText(this, "Error message", Toast.LENGTH_LONG).show(); 
      } 
      break; 
     } 
    } 
} 
+0

Спасибо за предложение, я решил проблему, но спасибо за вашу помощь – JJSmith

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