2012-09-12 30 views
125

Sử dụng thư viện Gson, làm cách nào để chuyển đổi chuỗi JSON thành ArrayList của lớp tùy chỉnh JsonLog? Về cơ bản, JsonLog là một giao diện được thực hiện bởi các loại nhật ký khác nhau được thực hiện bởi ứng dụng Android của tôi - Nhật ký SMS, nhật ký cuộc gọi, nhật ký dữ liệu - và ArrayList này là tập hợp tất cả chúng. Tôi tiếp tục gặp lỗi trong dòng 6.Gson - chuyển đổi từ Json sang kiểu ArrayList <T>

public static void log(File destination, JsonLog log) { 
    Collection<JsonLog> logs = null; 
    if (destination.exists()) { 
     Gson gson = new Gson(); 
     BufferedReader br = new BufferedReader(new FileReader(destination)); 
     logs = gson.fromJson(br, ArrayList<JsonLog>.class); // line 6 
     // logs.add(log); 
     // serialize "logs" again 
    } 
} 

Dường như trình biên dịch không hiểu tôi đang tham chiếu đến số được nhập ArrayList. Tôi làm gì?

Trả lời

318

Bạn có thể sử dụng TypeToken để tải chuỗi json vào đối tượng tùy chỉnh.

logs = gson.fromJson(br, new TypeToken<List<JsonLog>>(){}.getType()); 
+0

Được rồi, tôi sẽ thử điều đó trước. –

+2

đã thử phương pháp này và tôi nhận được một lỗi biên dịch nói TypeToken() đã được bảo vệ quyền truy cập chỉ – jonney

+0

@jonney Tôi có cùng một vấn đề. Bất kỳ giải pháp? – Zapnologica

15

mẫu JSON của bạn là:

{ 
    "status": "ok", 
    "comment": "", 
    "result": { 
    "id": 276, 
    "firstName": "mohamed", 
    "lastName": "hussien", 
    "players": [ 
      "player 1", 
      "player 2", 
      "player 3", 
      "player 4", 
      "player 5" 
    ] 
} 

vì vậy nếu bạn muốn lưu ArrayList các module trong SharedPrefrences của bạn vậy:

1- sẽ chuyển đổi ArrayList trở của bạn cho định dạng json sử dụng phương pháp này

public static String toJson(Object jsonObject) { 
    return new Gson().toJson(jsonObject); 
} 

2- Lưu nó trong phân phát được chia sẻ

PreferencesUtils.getInstance(context).setString("players", toJson((.....ArrayList you want to convert.....))); 

3- để lấy nó bất cứ lúc nào có được JsonString từ sở thích chung như thế

String playersString= PreferencesUtils.getInstance(this).getString("players"); 

4- chuyển đổi nó một lần nữa để array list

public static Object fromJson(String jsonString, Type type) { 
    return new Gson().fromJson(jsonString, type); 
} 

ArrayList<String> playersList= (ArrayList<String>) fromJson(playersString, 
        new TypeToken<ArrayList<String>>() { 
        }.getType()); 

giải pháp này cũng có thể làm được nếu bạn muốn để phân tích ArrayList của các đối tượng Hy vọng nó giúp bạn bằng cách sử dụng Gson Library.

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