【问题标题】:How to save multiple values to a single variable through an activity.如何通过活动将多个值保存到单个变量。
【发布时间】:2013-04-27 12:25:03
【问题描述】:

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

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

编辑:

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

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

【问题讨论】:

  • 似乎您希望它们保存在 SQLiteDB 或 SharedPreference 中 --> 看看这个:stackoverflow.com/questions/15948107/… - 只是为了概念,而不是问题的相似性。
  • @Hardik,请检查更新。
  • @tenhouse,共享偏好不符合我的逻辑,请检查更新。

标签: android arrays string dynamic android-activity


【解决方案1】:

除非元素的数量是已知且恒定的,否则最好使用 ArrayList 而不是数组。如果由于方向改变导致Activity被破坏时想要保留数据,可以将它们保存在 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();

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

【讨论】:

  • 您能否检查更新并相应地完善您的答案?这绝对是我正在寻找的解决方案的字符串。谢谢!
  • 看来您只需要存储一个字符串而不是字符串数组。就这些吗?
  • 就像我提到的,每次我触发一个活动时,它都会返回一对值,我需要它们继续添加到数组或变量中,直到我触发另一个活动并将整个集合传递给它.
  • 如果某个值在您开始活动之前已经存在,我建议您将数据作为意图传递给新活动,然后将数据发送回主活动(参见:stackoverflow.com/questions/920306/…
  • 每次我扫描一些东西,它都会产生一些价值。当我附加新值时,我希望能够扫描多个事物并将它们继续存储在单个数组或字符串中,而不会清除前一次扫描的值。问题不在于意图,而在于首先成功地存储所有值!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多