我正在尝试开发一个qr扫描仪,我想向用户显示扫描结果的历史记录。现在虽然扫描的数据值正确地传递给不同的活动;它的问题是,即使我没有扫描qr,空数据也会传递到下一个活动的列表视图。
我的问题是如何确保只有扫描了qr,数据才会传递到列表视图中的下一个活动?
这是我的条形码活动的代码。
public class MainActivity extends AppCompatActivity implements ZXingScannerView.ResultHandler {
//Initialization
private static final int REQUEST_CAMERA = 1;
private ZXingScannerView mScannerView;
ArrayList<String> listOfBarcodes = new ArrayList<String>();
//This is the part where I handle the result
@Override
public void handleResult(Result rawResult) {
final String result = rawResult.getText();
if(!result.isEmpty()) {
//whenever you capture a new barcode add it to this list
listOfBarcodes.add(result);
}
P.S:在此之后处理结果以显示在AlertDialog中。
我将数据发送到下一个活动的部分。
Intent data = new Intent( getApplicationContext(), History.class );
if (listOfBarcodes!=null) {
data.putExtra("Barcode", listOfBarcodes);
}
startActivity( data );
History.java
public class History extends AppCompatActivity {
public static final ArrayList completeList = new ArrayList<String>();
TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
textView = findViewById(R.id.text_view);
Intent callingIntent= getIntent();
ArrayList<String> listOfBarcodes = callingIntent.getExtras().getStringArrayList("Barcode");
completeList.add(listOfBarcodes);
ArrayAdapter<String> aA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList);
ListView lv = (ListView) findViewById(R.id.my_list_id);
lv.setAdapter(aA);
除此之外,我也会在completeList.add(listOfBarcodes);
取消选中&#39;添加(E)&#39;作为原始类型的成员 &#39;的java.util.ArrayList&#39; less ...(Ctrl + F1)表示放置的位置 未经检查的警告由编译器发出,例如:
void f(HashMap map){ map.put(&#34; key&#34;,&#34; value&#34;); }
在History.java
中,带有空值的列表视图显示为[]。是否有不同的方法来传递数据,或者我在这里遗漏了什么?
答案 0 :(得分:1)
您必须在发送putStringArrayListExtra()
时使用ArrayList<String>
。首先确保列表listOfBarcodes
包含数据。
Intent data = new Intent( getApplicationContext(), History.class );
if(listOfBarcodes.size()!=0)
data.putStringArrayListExtra("Barcode",listOfBarcodes);
startActivity(data);
在历史活动中: -
ListView lv = (ListView) findViewById(R.id.my_list_id);
Intent callingIntent= getIntent();
if(callingIntent.hasExtra("Barcode")) {
ArrayList<String> listOfBarcodes = callingIntent.getStringArrayListExtra("Barcode");
completeList.addAll(listOfBarcodes);
ArrayAdapter<String> aA = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, completeList);
lv.setAdapter(aA);
}else{
// No scanned handle here
}