3

我正在创建一个应用程序,在该应用程序中我扫描多个条形码并不断提取它们的值并将它们组合在一个地方。听起来很简单,但我无法创建一个持续存储新值的数组或一个持续连接它们的字符串。

如果有人需要更多代码或解释,请发表评论,我知道这个问题可能也不是很丰富。

编辑 :

 public class example 
 {

    String val;
      @Override
        public void onCreate(Bundle savedInstanceState)
        {
          super.onCreate(savedInstanceState);
          try
          {

              String list_id=ToolList3.ID; 
               String list_qty=ToolScanDet3.qty;

              // val is returned from the barcode scanning app.

              val=val+issue_id+"~"+issue_qty+";";
              Log.d("Tools issued till yet...", val);

              /* Club all the tool IDs together and fire a single query to issue 
                                 them all against one name. */

              Intent i=new Intent(Issue.this,Issue1.class);
              startActivity(i); 

              //Issue1 again returns a pair of id and qty which needs to be saved along with the previous set of values.
          }

我基本上无法尝试将返回的一组值与以前的值一起保存,返回的新值会清除以前的值。我也尝试将它们放入一个数组中,但这需要一个计数器,这再次破坏了目的,因为计数器将被初始化为零并重新开始。

4

2 回答 2

1

除非元素的数量是已知且恒定的,否则最好使用 ArrayList 而不是数组。如果您想在由于方向更改导致活动被破坏时保留数据,您可以将它们保存在 onSavedInstanceState 中:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("temp", tempString);
}

然后在 onCreate 中检索它:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    if(savedInstanceState != null) {
        your_arraylist = savedInstanceState.getString("temp");
    }

编辑:根据您的需要,扫描活动不应初始化任何字符串。它应该获取由 main 传递给它的字符串值:

    public class ScanActivity extends Activity {

    String tempString;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if(savedInstanceState == null) {
        tempString = getIntent().getStringExtra("temp");
    } else {
        // orientation change
        tempString = saveInstanceState.getString("temp");
    }
}

完成扫描后,执行

Intent output = new Intent();
output.putExtra("temp", tempString);
setResult(RESULT_OK, output);
finish();

将字符串发送回您的主要活动。

于 2013-05-03T06:53:36.107 回答
0

我找不到任何对我的情况可行的解决方案,这就是我必须使用 SQL Lite 创建本地数据库的原因。每次需要时将值推送到数据库,然后在我的工作流程结束后检索这些值。

如果有人在使用 SQL Lite 创建本地数据库方面需要帮助,请发表评论。乐意效劳 :)

于 2013-05-11T03:51:57.580 回答