Как использовать результат сканирования ZXING


Я ломаю над этим голову. Я вроде как новичок в разработке android.

Я хочу использовать результат сканирования из ZXING. Я интегрировал ZXING в свое приложение для android, сканирование работает нормально. Теперь я хочу использовать результат сканирования для обновления TextView в основном действии.

Как я могу это сделать?

Мой код сейчас делает следующее:

  1. Откройте основное действие кнопкой.
  2. при нажатии на кнопку он активирует сканер.
  3. после сканирования вернемся к основной деятельности.
  4. TextView пуст и по какой-то причине возвращается к исходному содержимому после перехода от ландшафта к портрету.

После (2) я хочу использовать отсканированный результат для обновления TextView в основном действии (tv в моем коде).

Пожалуйста, помогите ребятам, Спасибо.

Мой код:

public class Main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button pressToScan = (Button) findViewById(R.id.button1);

    pressToScan.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent data = new Intent("com.google.zxing.client.android.SCAN");
            data.putExtra("SCAN_MODE", "QR_CODE_MODE");
            startActivityForResult(data, 0);

TextView tv = (TextView) findViewById(R.id.scanResult);
                tv.setText(data.getStringExtra("SCAN_RESULT"));
        }
    });
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    String contents = null;
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 0) {
          if (resultCode == RESULT_OK) {
             contents = data.getStringExtra("SCAN_RESULT");
             String format = data.getStringExtra("SCAN_RESULT_FORMAT");

             // Handle successful scan
          } else if (resultCode == RESULT_CANCELED) {
             // Handle cancel
          }
    }

}

}

2 4

2 ответа:

Переместите следующий блок

TextView tv = (TextView) findViewById(R.id.scanResult);
tv.setText(data.getStringExtra("SCAN_RESULT"));

К

public void onActivityResult(int requestCode, int resultCode, Intent data) {
String contents = null;
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
      if (resultCode == RESULT_OK) {
         contents = data.getStringExtra("SCAN_RESULT");
         String format = data.getStringExtra("SCAN_RESULT_FORMAT");
         //moved here
         TextView tv = (TextView) findViewById(R.id.scanResult);
         tv.setText(contents);
         // Handle successful scan
      } else if (resultCode == RESULT_CANCELED) {
         // Handle cancel
      }
}

}

[Edit]

Добавьте это в свою деятельность

@Override
public void onConfigurationChanged(Configuration newConfig){        
    super.onConfigurationChanged(newConfig);
}

В манифесте измените основное действие, чтобы добавить android: configChanges= "ориентация"

<activity android:name="..."
          android:label="@string/appName"
          android:configChanges="orientation"

Когда вы вызываете startActivityForResult() когда вызываемое действие устанавливает свои данные, оно вызывает onActivityResult() в вашем действии, startActivityForResult() не приостанавливает выполнение метода, поэтому правильный способ записать это

public void onActivityResult(int requestCode, int resultCode, Intent data) {
String contents = null;
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0) {
      if (resultCode == RESULT_OK) {
         contents = data.getStringExtra("SCAN_RESULT");
         String format = data.getStringExtra("SCAN_RESULT_FORMAT");
         tv.setText(contents);

         // Handle successful scan
      } else if (resultCode == RESULT_CANCELED) {
         // Handle cancel
      }
}

}

}