Barcode scannen und in EditText Eintragen

  • Antworten:0
Col.Biernot
  • Forum-Beiträge: 30

09.11.2015, 10:42:58 via Website

Hallo,

Ich habe folgendes Problem. Ich habe eine MainActivity in der Ich einen QR Code scannen und dessen Werte dann in eine Liste eingetragen werden. In dieser MainActivity befindet sich auch meine onActivityResult Methode.
Des weiteren habe Ich ein AddDataFragment. Hier werden einige Werte in EditTexts eingegeben und anschließend in eine Datenbank eingetragen. HIer in dem Fragment habe Ich für ein EditText auch die Möglichkeit eine Nummer (Seriennummer) mit einem Barcodescanner einzuscannen. Diese soll dann direkt in das passende EditTextFeld eingetragen werden. Hierfür rufe Ich die methode scanSerial in der MainActivity auf. Das funktioniert alles ohne Probleme und mein onActivityResult liefert mir je nach Ursprungsaufruf auch das passende Ergebnis.
Jetzt muss Ich aber die gescannte Seriennummer wieder in mein Fragment zurückgeben. Und Ich weiß nicht wie Ich das machen soll.

  1. Der gescannte String darf erst abgefragt werden wenn der Scan-Vorgang abgeschlossen ist um einen Nullpointer Exception Error zu vermeiden.

  2. Der Status der anderen EditText Felder muss zwischengespeichert werden damit die anderen Daten beim scannen nicht verloren gehen.

hat jemand eine Idee?

MainActivity onActivityResult&scanSerial:

public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);

        if (resultCode == RESULT_OK) {
            String scanContent = intent.getStringExtra("SCAN_RESULT");
            String scanFormat = intent.getStringExtra("SCAN_RESULT_FORMAT");
            Log.d("INHALT", scanContent);
            Log.d("FORMAT", scanFormat);

            switch (requestCode){
                case (10):{
                    String[] Split = scanContent.split("\\s");
                    String product = Split[0];
                    String label = Split[1];
                    String serial = Split[2];

                    mydb.insertData(product, label, serial);

                    Fragment fragment;
                    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
                    fragment = new ListViewFragment();
                    ft.replace(R.id.container, fragment);
                    ft.commitAllowingStateLoss();
                    break;
                }
                case (11):{
                    scannedResult = scanContent;

                    Log.d("TEST", scanContent);

                    break;
                }
            }
        } else if (resultCode == RESULT_CANCELED) {

            Log.d("TEST", "result_canceled");
        }

}

public void scanSerial(){
    Intent intent = new Intent("com.google.zxing.client.android.SCAN");
    intent.putExtra("SCAN_FORMATS", "CODE_39,CODE_93,CODE_128,DATA_MATRIX,ITF,CODABAR,EAN_13,EAN_8,UPC_A");
    startActivityForResult(intent, 11);
}

AddDataFragment Scan Aufruf:

        //Serial
    inputSerial = (EditText) view.findViewById(R.id.editText_serial);
    ImageButton ib = (ImageButton) view.findViewById(R.id.button_scan_serial);
    ib.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ((MainActivity) getActivity()).scanSerial();
        }
    });

Antworten