title: How to save zxing barcode scan results to a database?
body: <p>I'm working on a project that takes student attendance using a camera based barcode scanner. i'm using zxing as a barcode canner. i followed instructions on a web page and created a package and added two files called IntentResult.java and IntentIntegrater.java
  these are the files.</p>
  
  <p>intentResult.java</p>
  
  <pre><code>package google.zxing.integration.android;
  public final class IntentResult {
  private final String contents;
  private final String formatName;
  private final byte[] rawBytes;
  private final Integer orientation;
  private final String errorCorrectionLevel;
  IntentResult() {
      this(null, null, null, null, null);
  }
  IntentResult(String contents,
               String formatName,
               byte[] rawBytes,
               Integer orientation,
               String errorCorrectionLevel) {
      this.contents = contents;
      this.formatName = formatName;
      this.rawBytes = rawBytes;
      this.orientation = orientation;
      this.errorCorrectionLevel = errorCorrectionLevel;
  }
  public String getContents() {
      return contents;
  }
  public String getFormatName() {
      return formatName;
  }
  public byte[] getRawBytes() {
      return rawBytes;
  }
  public Integer getOrientation() {
      return orientation;
  }
  public String getErrorCorrectionLevel() {
      return errorCorrectionLevel;
  }
  @Override
  public String toString() {
      StringBuilder dialogText = new StringBuilder(100);
      dialogText.append("Format: ").append(formatName).append('\n');
      dialogText.append("Contents: ").append(contents).append('\n');
      int rawBytesLength = rawBytes == null ? 0 : rawBytes.length;
      dialogText.append("Raw bytes: (").append(rawBytesLength).append(" bytes)\n");
      dialogText.append("Orientation: ").append(orientation).append('\n');
      dialogText.append("EC level: ").append(errorCorrectionLevel).append('\n');
      return dialogText.toString();
  }
  }
  </code></pre>
  
  <p>and IntentIntegrater.java`</p>
  
  <pre><code>package google.zxing.integration.android;
  import java.util.Arrays;
  import java.util.Collection;
  import java.util.Collections;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.ActivityNotFoundException;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.content.pm.PackageManager;
  import android.content.pm.ResolveInfo;
  import android.net.Uri;
  import android.os.Bundle;
  import android.util.Log;
  
  public class IntentIntegrator {
  
  public static final int REQUEST_CODE = 0x0000c0de; // Only use bottom 16 bits
  private static final String TAG = IntentIntegrator.class.getSimpleName();
  public static final String DEFAULT_TITLE = "Install Barcode Scanner?";
  public static final String DEFAULT_MESSAGE =
          "This application requires Barcode Scanner. Would you like to install it?";
  public static final String DEFAULT_YES = "Yes";
  public static final String DEFAULT_NO = "No";
  private static final String BS_PACKAGE = "com.google.zxing.client.android";
  private static final String BSPLUS_PACKAGE = "com.srowen.bs.android";
  // supported barcode formats
  public static final Collection&lt;String&gt; PRODUCT_CODE_TYPES = list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "RSS_14");
  public static final Collection&lt;String&gt; ONE_D_CODE_TYPES =
          list("UPC_A", "UPC_E", "EAN_8", "EAN_13", "CODE_39", "CODE_93", "CODE_128",
                  "ITF", "RSS_14", "RSS_EXPANDED");
  public static final Collection&lt;String&gt; QR_CODE_TYPES = Collections.singleton("QR_CODE");
  public static final Collection&lt;String&gt; DATA_MATRIX_TYPES = Collections.singleton("DATA_MATRIX");
  public static final Collection&lt;String&gt; ALL_CODE_TYPES = null;
  public static final List&lt;String&gt; TARGET_BARCODE_SCANNER_ONLY = Collections.singletonList(BS_PACKAGE);
  public static final List&lt;String&gt; TARGET_ALL_KNOWN = list(
          BS_PACKAGE, // Barcode Scanner
          BSPLUS_PACKAGE, // Barcode Scanner+
          BSPLUS_PACKAGE + ".simple" // Barcode Scanner+ Simple
  // What else supports this intent?
  );
  private final Activity activity;
  private String title;
  private String message;
  private String buttonYes;
  private String buttonNo;
  private List&lt;String&gt; targetApplications;
  private final Map&lt;String,Object&gt; moreExtras;
  public IntentIntegrator(Activity activity) {
      this.activity = activity;
      title = DEFAULT_TITLE;
      message = DEFAULT_MESSAGE;
      buttonYes = DEFAULT_YES;
      buttonNo = DEFAULT_NO;
      targetApplications = TARGET_ALL_KNOWN;
      moreExtras = new HashMap&lt;String,Object&gt;(3);
  }
  public String getTitle() {
      return title;
  }
  public void setTitle(String title) {
      this.title = title;
  }
  public void setTitleByID(int titleID) {
      title = activity.getString(titleID);
  }
  public String getMessage() {
      return message;
  }
  public void setMessage(String message) {
      this.message = message;
  }
  public void setMessageByID(int messageID) {
      message = activity.getString(messageID);
  }
  public String getButtonYes() {
      return buttonYes;
  }
  public void setButtonYes(String buttonYes) {
      this.buttonYes = buttonYes;
  }
  public void setButtonYesByID(int buttonYesID) {
      buttonYes = activity.getString(buttonYesID);
  }
  public String getButtonNo() {
      return buttonNo;
  }
  public void setButtonNo(String buttonNo) {
      this.buttonNo = buttonNo;
  }
  public void setButtonNoByID(int buttonNoID) {
      buttonNo = activity.getString(buttonNoID);
  }
  public Collection&lt;String&gt; getTargetApplications() {
      return targetApplications;
  }
  public final void setTargetApplications(List&lt;String&gt; targetApplications) {
      if (targetApplications.isEmpty()) {
          throw new IllegalArgumentException("No target applications");
      }
      this.targetApplications = targetApplications;
  }
  public void setSingleTargetApplication(String targetApplication) {
      this.targetApplications = Collections.singletonList(targetApplication);
  }
  public Map&lt;String,?&gt; getMoreExtras() {
      return moreExtras;
  }
  public final void addExtra(String key, Object value) {
      moreExtras.put(key, value);
  }
  public final AlertDialog initiateScan() {
      return initiateScan(ALL_CODE_TYPES);
  }
  public final AlertDialog initiateScan(Collection&lt;String&gt; desiredBarcodeFormats) {
      Intent intentScan = new Intent(BS_PACKAGE + ".SCAN");
      intentScan.addCategory(Intent.CATEGORY_DEFAULT);
  // check which types of codes to scan for
      if (desiredBarcodeFormats != null) {
  // set the desired barcode types
          StringBuilder joinedByComma = new StringBuilder();
          for (String format : desiredBarcodeFormats) {
              if (joinedByComma.length() &gt; 0) {
                  joinedByComma.append(',');
              }
              joinedByComma.append(format);
          }
          intentScan.putExtra("SCAN_FORMATS", joinedByComma.toString());
      }
      String targetAppPackage = findTargetAppPackage(intentScan);
      if (targetAppPackage == null) {
          return showDownloadDialog();
      }
      intentScan.setPackage(targetAppPackage);
      intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      intentScan.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      attachMoreExtras(intentScan);
      startActivityForResult(intentScan, REQUEST_CODE);
      return null;
  }
  protected void startActivityForResult(Intent intent, int code) {
      activity.startActivityForResult(intent, code);
  }
  private String findTargetAppPackage(Intent intent) {
      PackageManager pm = activity.getPackageManager();
      List&lt;ResolveInfo&gt; availableApps = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
      if (availableApps != null) {
          for (ResolveInfo availableApp : availableApps) {
              String packageName = availableApp.activityInfo.packageName;
              if (targetApplications.contains(packageName)) {
                  return packageName;
              }
          }
      }
      return null;
  }
  private AlertDialog showDownloadDialog() {
      AlertDialog.Builder downloadDialog = new AlertDialog.Builder(activity);
      downloadDialog.setTitle(title);
      downloadDialog.setMessage(message);
      downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialogInterface, int i) {
              String packageName = targetApplications.get(0);
              Uri uri = Uri.parse("market://details?id=" + packageName);
              Intent intent = new Intent(Intent.ACTION_VIEW, uri);
              try {
                  activity.startActivity(intent);
              } catch (ActivityNotFoundException anfe) {
  // Hmm, market is not installed
                  Log.w(TAG, "Google Play is not installed; cannot install " + packageName);
              }
          }
      });
      downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
          @Override
          public void onClick(DialogInterface dialogInterface, int i) {}
      });
      return downloadDialog.show();
  }
  public static IntentResult parseActivityResult(int requestCode, int resultCode, Intent intent) {
      if (requestCode == REQUEST_CODE) {
          if (resultCode == Activity.RESULT_OK) {
              String contents = intent.getStringExtra("SCAN_RESULT");
              String formatName = intent.getStringExtra("SCAN_RESULT_FORMAT");
              byte[] rawBytes = intent.getByteArrayExtra("SCAN_RESULT_BYTES");
              int intentOrientation = intent.getIntExtra("SCAN_RESULT_ORIENTATION", Integer.MIN_VALUE);
              Integer orientation = intentOrientation == Integer.MIN_VALUE ? null : intentOrientation;
              String errorCorrectionLevel = intent.getStringExtra("SCAN_RESULT_ERROR_CORRECTION_LEVEL");
              return new IntentResult(contents,
                      formatName,
                      rawBytes,
                      orientation,
                      errorCorrectionLevel);
          }
          return new IntentResult();
      }
      return null;
  }
  public final AlertDialog shareText(CharSequence text, CharSequence type) {
      Intent intent = new Intent();
      intent.addCategory(Intent.CATEGORY_DEFAULT);
      intent.setAction(BS_PACKAGE + ".ENCODE");
      intent.putExtra("ENCODE_TYPE", type);
      intent.putExtra("ENCODE_DATA", text);
      String targetAppPackage = findTargetAppPackage(intent);
      if (targetAppPackage == null) {
          return showDownloadDialog();
      }
      intent.setPackage(targetAppPackage);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
      intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
      attachMoreExtras(intent);
      activity.startActivity(intent);
      return null;
  }
  private static List&lt;String&gt; list(String... values) {
      return Collections.unmodifiableList(Arrays.asList(values));
  }
  private void attachMoreExtras(Intent intent) {
      for (Map.Entry&lt;String,Object&gt; entry : moreExtras.entrySet()) {
          String key = entry.getKey();
          Object value = entry.getValue();
  // Kind of hacky
          if (value instanceof Integer) {
              intent.putExtra(key, (Integer) value);
          } else if (value instanceof Long) {
              intent.putExtra(key, (Long) value);
          } else if (value instanceof Boolean) {
              intent.putExtra(key, (Boolean) value);
          } else if (value instanceof Double) {
              intent.putExtra(key, (Double) value);
          } else if (value instanceof Float) {
              intent.putExtra(key, (Float) value);
          } else if (value instanceof Bundle) {
              intent.putExtra(key, (Bundle) value);
          } else {
              intent.putExtra(key, value.toString());
          }
      }
  }
  }
  </code></pre>
  
  <p>And Barcodereader.java page where i call the two classes</p>
  
  <pre><code>package com.example.marys.barcodereader;
  
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.ActivityNotFoundException;
  import android.content.DialogInterface;
  import android.net.Uri;
  import android.support.v7.app.AppCompatActivity;
  import android.os.Bundle;
  import android.content.Intent;
  import android.view.View;
  import android.widget.TextView;
  import android.widget.Toast;
  
  public class BarReader extends AppCompatActivity {
  
  static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      //set the main content layout of the Activity
      setContentView(R.layout.activity_bar_reader);
  }
  
  //product barcode mode
  public void scanBar(View v) {
      try {
          //start the scanning activity from the com.google.zxing.client.android.SCAN intent
          Intent intent = new Intent(ACTION_SCAN);
          intent.putExtra("SCAN_MODE", "PRODUCT_MODE");
          startActivityForResult(intent, 0);
      } catch (ActivityNotFoundException anfe) {
          //on catch, show the download dialog
          showDialog(BarReader.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
      }
  }
  
  //product qr code mode
  public void scanQR(View v) {
      try {
          //start the scanning activity from the com.google.zxing.client.android.SCAN intent
          Intent intent = new Intent(ACTION_SCAN);
          intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
          startActivityForResult(intent, 0);
      } catch (ActivityNotFoundException anfe) {
          //on catch, show the download dialog
          showDialog(BarReader.this, "No Scanner Found", "Download a scanner code activity?", "Yes", "No").show();
      }
  }
  
  //alert dialog for downloadDialog
  private static AlertDialog showDialog(final Activity act, CharSequence title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) {
      AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
      downloadDialog.setTitle(title);
      downloadDialog.setMessage(message);
      downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialogInterface, int i) {
              Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
              Intent intent = new Intent(Intent.ACTION_VIEW, uri);
              try {
                  act.startActivity(intent);
              } catch (ActivityNotFoundException anfe) {
  
              }
          }
      });
      downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialogInterface, int i) {
          }
      });
      return downloadDialog.show();
  }
  
  //on ActivityResult method
  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
              String contents = intent.getStringExtra("SCAN_RESULT");
              String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
              Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG);
              toast.show();
          }
      }
  }
  
  }
  </code></pre>
  
  <p>I didn't make the zxing as a library. If i should tell me. At the moment when you first run the app it make you download a barcode scanner from google store.
  I hope this is enough. If you need any more information let me know. Thanks in advance
  `</p>