Search code examples
javaandroidzxing

ZXing Scanner Searching for Results


I am having some issues with ZXing's barcode scanner in my android application. I asked a question here yesterday that explains a null pointer error that I was having. The issue was solved and just showed that the cursor wasnt retrieving any information back.

My issues is that I know query is correct and I know the code is correct because I have tested it out without the scanner separately and it all works fine. Is it possible that I am calling to the database wrong in the barcode scanner intent or is there a certain way that I should be doing it?

Any help or guidance would be great!

onActivity Result

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();
        }
    }
}

Query

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});
}

Error

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)

Solution

  • I have fixed the issue. My problem was that I wasnt opening the database before I was calling the functions and thus the function was a null object. The correct code is as below.

                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();
                }