Как использовать результат сканирования ZXING - PullRequest
4 голосов
/ 31 марта 2012

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

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

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

В настоящее время мой код выполняет следующие действия:

  1. Открыть главное действие с помощью кнопки.
  2. При нажатии на кнопку он активирует сканер.
  3. После сканирования он возвращается к основному действию.
  4. TextViewпустой и по какой-то причине он возвращается к исходному содержимому после перехода от альбомной к портретной ориентации.

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

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

Мой код:

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 ]

6 голосов
/ 31 марта 2012

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

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

}

[Изменить]

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

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

в манифесте измените основное действие на добавление android: configChanges = "direction"

<activity android:name="..."
          android:label="@string/appName"
          android:configChanges="orientation"
1 голос
/ 31 марта 2012

когда вы вызываете 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
      }
}

}

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...