【问题标题】:Best way to save arraylist to androids memory将arraylist保存到androids内存的最佳方法
【发布时间】:2012-12-24 22:32:12
【问题描述】:

我有一个包从一个活动传递到另一个活动。其中包含字符串 n(长度最大为 30)、字符串 ID 和字符串颜色。我需要将这些值作为数组(n、ID、颜色)保存到 ArrayList 中,然后将 ArrayList 保存到 androids 内存中。我一直在寻找一种最好的方法。我已经尝试过数据库,但目前它对我来说很复杂,我认为我不需要这么复杂的东西。我已经尝试过 FileOutputStream (正如这里解释的那样:http://developer.android.com/guide/topics/data/data-storage.html#pref?)但它对我不起作用,可能是因为我做错了什么。我是否真的需要创建数组的arraylist,或者我可以使用arraylist of bundles,或者任何其他方式..?什么是最好的方法...?请帮忙..

谢谢大家...一直在尝试但没有运气..我发布代码希望有人可以帮我解决这个问题:

public class MainActivity extends Activity
{
String gotNotes;
String n;
String gotDOW;
String gotID;
public String clrs;
public String id;
public String nts;
String gotHour;
String gotColor;
TextView notes;
public static String FILENAME = "allevents";
String[] newevent;
String[] events;
SharedPreferences sharedPref;


  @Override
  public void onCreate(Bundle savedInstanceState) 
   {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);



    Button settings = (Button)findViewById(R.id.settings);

    Bundle gotPackage = getIntent().getExtras();
    if (gotPackage != null){
    gotNotes = gotPackage.getString("AddedNote");
    if (gotNotes.equals(" "))
      {
        n = "Empty";
      }
    else 
        {
        n = gotNotes;
        }
    //gotDOW = gotPackage.getString("Day");
    //gotHour = gotPackage.getInt("Hour");
    gotID = gotPackage.getString("ID");
    gotColor = gotPackage.getString("color");

    initialize();

    }
    else{}



 settings.setOnClickListener(new OnClickListener()
    {
       public void onClick(View v)
         {
              Intent i = new Intent(v.getContext(),Settings.class);
              startActivityForResult(i,0);
         }

    });

 }

private void initialize() 
 {
    // TODO Auto-generated method stub
String[] newevent = {n, gotID, gotColor};

ArrayList<String[]> events = new ArrayList<String[]>();
events.add(newevent);

SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE);
SharedPreferences.Editor editor =     this.getPreferences(Activity.MODE_PRIVATE).edit();
editor.putString("yourKey", events.toString());
editor.commit();

String allData = sharedPref.getString("yourKey", null);
String[] playlists = allData.split(",");

  /* for (int number=0;number<events.lastIndexOf(sharedPref);number++)
   {

           notes = (TextView)findViewById(getResources().getIdentifier(playlists[number], getString(0), allData));
           notes.setText(number+1);


   }*/



    notes = (TextView)findViewById(getResources().getIdentifier(gotID,     "id",getPackageName()));
    notes.setText(n);
    notes.setGravity(Gravity.CENTER_HORIZONTAL);
    notes.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12);
    if (gotColor.equals("Blue")){
    notes.setBackgroundColor(Color.rgb(99, 184, 255));}else
    if(gotColor.equals("Green")){
    notes.setBackgroundColor(Color.rgb(189, 252, 201));}else
    if(gotColor.equals("Yellow")){
    notes.setBackgroundColor(Color.rgb(238, 233, 191));}else
    if(gotColor.equals("Grey")){
    notes.setBackgroundColor(Color.LTGRAY);}else    
    if(gotColor.equals("Aqua")){
    notes.setBackgroundColor(Color.rgb(151, 255, 255));}else
    if(gotColor.equals("White")){}

}



    @Override
public boolean onCreateOptionsMenu(Menu menu) 
{
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;

}

}

【问题讨论】:

  • 既然您说字符串的最大长度约为 30,那么您应该将其保存在 SharedPreferences 中,就像 Serdar 已经解释的那样。对于您的用例而言,数据库将是复杂且不必要的。

标签: android arrays arraylist save fileoutputstream


【解决方案1】:

您可以将数组保存到共享首选项中并取回它。 Here 是一个具有完整功能代码的好例子。

【讨论】:

    【解决方案2】:

    只需使用 SharedPreferences 即可保存应用程序的数据。

    SharedPreferences sharedPref = activity.getPreferences(Activity.MODE_PRIVATE);
    SharedPreferences.Editor editor = activity.getPreferences(Activity.MODE_PRIVATE).edit();
    editor.putString("yourKey", yourArray.toString());
    editor.commit();
    

    要将您的数组作为字符串,请执行以下操作:

    String arrayString = sharedPref.getString("yourKey", null);
    

    【讨论】:

    • 感谢 Serdar S. ...activity.getPreferences 中的活动是什么?对不起,我是菜鸟..
    • 这只是你的活动。您可以使用 YourActivityName.this 代替它。
    • 好的,通过使用 this.getPreferences 解决了这个问题。您能否解释一下什么是arrayString、“yourKey”以及这种转换是如何工作的?谢谢!
    • 我的意思是如何从arrayString中检索这三个值
    • 您只能在 SharedPreferences 中将 ArrayList 保存为“String”类型。因此,arrayString 是您之前通过 putString 方法放入 SharedPreferences 的字符串值。您可以在 android 开发者网站上查看:developer.android.com/reference/android/content/…
    猜你喜欢
    • 2011-04-04
    • 2013-09-22
    • 1970-01-01
    • 2012-06-19
    • 2013-12-10
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2017-10-27
    相关资源
    最近更新 更多