2012-09-05 39 views
9

tôi muốn tiết kiệm một ArrayList để SharedPreferences vì ​​vậy tôi cần phải biến nó thành một chuỗi và trở lại, đây là những gì tôi đang làm:Java chuyển đổi ArrayList thành chuỗi và quay lại ArrayList?

// Save to shared preferences 
SharedPreferences sharedPref = this.getPreferences(Activity.MODE_PRIVATE); 
SharedPreferences.Editor editor = this.getPreferences(Activity.MODE_PRIVATE).edit(); 
editor.putString("myAppsArr", myAppsArr.toString()); 
editor.commit(); 

tôi có thể lấy nó với String arrayString = sharedPref.getString("yourKey", null); nhưng tôi không biết làm thế nào để chuyển đổi arrayString trở lại thành một ArrayList. Nó được hoàn thiện bằng cách nào?


mảng của tôi trông giống như sau:

[item1,item2,item3] 

Trả lời

26

Bạn có 2 lựa chọn:

  1. thủ phân tích chuỗi và tạo lại ArrayList. Điều này sẽ khá tẻ nhạt.
  2. Sử dụng thư viện JSON như thư viện Gson của Google để lưu trữ và truy xuất các đối tượng dưới dạng chuỗi JSON. Đây là một thư viện nhẹ, được đánh giá cao và phổ biến. Nó sẽ là một giải pháp lý tưởng trong trường hợp của bạn với công việc tối thiểu cần thiết. ví dụ,

    // How to store JSON string 
    Gson gson = new Gson(); 
    // This can be any object. Does not have to be an arraylist. 
    String json = gson.toJson(myAppsArr); 
    
    // How to retrieve your Java object back from the string 
    Gson gson = new Gson(); 
    DataObject obj = gson.fromJson(arrayString, ArrayList.class); 
    
+0

Tôi đã thay đổi thành phần mảng thành chuỗi, tôi chắc chắn rằng nó phải dễ dàng hơn nhiều bây giờ. – lisovaccaro

+0

Nó không quan trọng. Với Gson, bạn có thể chuyển đổi bất kỳ đối tượng java nào thành chuỗi và sau đó chuyển đổi nó trở lại. Vì vậy, ngay cả khi bạn có một danh sách các đối tượng tùy chỉnh, không có vấn đề gì. –

2

Hãy thử điều này

ArrayList<String> array = Arrays.asList(arrayString.split(",")) 

Điều này sẽ có tác dụng nếu dấu phẩy được sử dụng như tách và không ai trong số các mặt hàng có nó.

1

tôi đã kết thúc bằng:

ArrayList<String> appList = new ArrayList<String>(Arrays.asList(appsString.split("\\s*,\\s*"))); 

này không làm việc cho tất cả các loại mảng mặc dù. Tùy chọn này khác với:

ArrayList<String> array = Arrays.asList(arrayString.split(",")); 

trên tùy chọn thứ hai tạo mảng không thể khắc phục.

+0

Bạn có thấy câu trả lời của tôi không? –

Các vấn đề liên quan