首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 獲取後端 JSON 數據並填充 ListView:標準流程與 Gson 解析

     編輯:程式設計疑難解答

端到端流程


[後端 Controller] → JSON 字符串 → [Android OkHttp/Retrofit] → Gson 解析 → List → ArrayAdapter → ListView

後端接口示例


// Spring Boot
@GetMapping("/api/items")
public List getItems() {
    return itemService.findAll(); // Jackson 自動序列化為 JSON 數組
}
// 輸出:[{"id":1,"name":"Item1"},{"id":2,"name":"Item2"}]

Android 完整實現

1. 實體類


public class Item {
    private int id;
    private String name;
    // getter/setter
}

2. 異步請求 + Gson 解析


// 使用 OkHttp
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
    .url("https://your-server.com/api/items")
    .build();

client.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        runOnUiThread(() -> Toast.makeText(MainActivity.this, "網絡錯誤", Toast.LENGTH_SHORT).show());
    }
    
    @Override
    public void onResponse(Call call, Response response) throws IOException {
        if (!response.isSuccessful()) return;
        String json = response.body().string();
        
        // Gson 解析數組
        Type listType = new TypeToken>(){}.getType();
        List items = new Gson().fromJson(json, listType);
        
        // 切換到主線程更新 UI
        runOnUiThread(() -> {
            ArrayAdapter adapter = new ArrayAdapter<>(
                MainActivity.this, 
                android.R.layout.simple_list_item_1, 
                items
            );
            listView.setAdapter(adapter);
        });
    }
});

3. 使用 Retrofit + Gson(推薦生產)


public interface ApiService {
    @GET("api/items")
    Call> getItems();
}

// 調用
api.getItems().enqueue(new Callback>() {
    @Override public void onResponse(Call> call, Response> resp) {
        if (resp.isSuccessful() && resp.body() != null) {
            adapter = new ArrayAdapter<>(MainActivity.this, 
                android.R.layout.simple_list_item_1, resp.body());
            listView.setAdapter(adapter);
        }
    }
    @Override public void onFailure(Call> call, Throwable t) { /* 錯誤處理 */ }
});

關鍵點總結

  1. 後端返回標準 JSON 數組,無需包裹對象。
  2. Gson 解析數組需 TypeToken:new TypeToken>(){}.getType()。
  3. 網絡請求必須在子線程,UI 更新回主線程 runOnUiThread。
  4. ListView 數據源為 List,ArrayAdapter 自動調用 toString() 顯示,或自定義 Adapter 複雜佈局。

進階:分頁加載與 RecyclerView

  • ListView 已不推薦新項目使用,改用 RecyclerView + LinearLayoutManager。
  • 分頁:GET /api/items?page=1&size=20,滾動到底部加載下一頁,adapter.notifyItemRangeInserted()。
  • 圖片加載:Glide/Picasso 異步載入列表圖片。

標準化「HTTP JSON → Gson → List → Adapter → RecyclerView」流程,是 Android 數據展開發的核心技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved