Complete Guide to Parsing Local JSON from Assets Folder and Populating ListView in Android Applications

Nov 21, 2025 · Programming · 11 views · 7.8

Keywords: Android Development | JSON Parsing | ListView | Assets Folder | Data Binding

Abstract: This article provides a comprehensive implementation guide for reading local JSON files from the assets folder, parsing data, and dynamically populating ListView in Android applications. Through step-by-step analysis of JSON parsing principles, file reading methods, and data adapter design, it offers reusable code examples and best practices to help developers master the complete process of local data handling.

Introduction

In modern mobile application development, local data storage and display are common requirements. The Android platform provides the assets folder as an ideal location for storing static resources, while JSON format has become the preferred choice for data exchange due to its lightweight nature and readability. This article deeply explores how to read JSON files from the assets folder, parse the data structure, and ultimately display it dynamically in a ListView.

JSON File Reading Implementation

First, we need to implement the functionality to read JSON files from the assets folder. The Android system provides access to assets resources through the AssetManager class. Here is a robust file reading method implementation:

public String loadJSONFromAsset(Context context, String filename) {
    String json = null;
    try {
        InputStream inputStream = context.getAssets().open(filename);
        int size = inputStream.available();
        byte[] buffer = new byte[size];
        inputStream.read(buffer);
        inputStream.close();
        json = new String(buffer, "UTF-8");
    } catch (IOException exception) {
        exception.printStackTrace();
        return null;
    }
    return json;
}

This method reads file content through an input stream, converts it to a byte array, and finally generates a UTF-8 encoded string. Key points include proper exception handling and resource release to ensure application stability.

JSON Data Parsing Process

After obtaining the JSON string, we need to parse the structured data within it. Android natively provides the org.json package for handling JSON data. Here is the complete parsing process:

try {
    JSONObject rootObject = new JSONObject(jsonString);
    JSONArray formulasArray = rootObject.getJSONArray("formules");
    
    ArrayList<HashMap<String, String>> dataList = new ArrayList<>();
    
    for (int index = 0; index < formulasArray.length(); index++) {
        JSONObject formulaObject = formulasArray.getJSONObject(index);
        String formulaName = formulaObject.getString("formule");
        String formulaUrl = formulaObject.getString("url");
        
        HashMap<String, String> itemMap = new HashMap<>();
        itemMap.put("formule", formulaName);
        itemMap.put("url", formulaUrl);
        
        dataList.add(itemMap);
    }
} catch (JSONException exception) {
    exception.printStackTrace();
}

The parsing process starts from the root object, obtains the array containing all formulas, then iterates through each array element to extract specific field values. Using HashMap to store key-value pairs facilitates subsequent adapter processing.

ListView Adapter Configuration

After data parsing is complete, we need to configure an adapter to bind data to the ListView. SimpleAdapter is an ideal choice for handling key-value pair data:

ListView formulasListView = findViewById(R.id.listFormulas);

String[] fromFields = {"formule", "url"};
int[] toViews = {android.R.id.text1, android.R.id.text2};

SimpleAdapter adapter = new SimpleAdapter(
    this,
    dataList,
    android.R.layout.simple_list_item_2,
    fromFields,
    toViews
);

formulasListView.setAdapter(adapter);

The adapter maps fields from HashMap to corresponding views in predefined layouts, achieving visual data display. Custom layout files can be used to achieve more complex interface effects according to requirements.

Complete Activity Implementation

Integrate various components into the Activity to form a complete solution:

public class FormulaListActivity extends Activity {
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_formula_list);
        
        ListView formulasListView = findViewById(R.id.listFormulas);
        
        String jsonData = loadJSONFromAsset(this, "formules.json");
        
        if (jsonData != null) {
            ArrayList<HashMap<String, String>> formulaList = parseJSONData(jsonData);
            
            if (formulaList != null && !formulaList.isEmpty()) {
                setupListViewAdapter(formulasListView, formulaList);
            }
        }
    }
    
    private ArrayList<HashMap<String, String>> parseJSONData(String jsonString) {
        // Parsing logic implementation
    }
    
    private void setupListViewAdapter(ListView listView, ArrayList<HashMap<String, String>> data) {
        // Adapter configuration logic
    }
}

This modular design improves code maintainability and testability.

Performance Optimization Recommendations

In practical applications, performance optimization needs consideration: file reading operations should be executed in background threads to avoid blocking the UI thread; consider using more efficient data structures to replace HashMap; for large amounts of data, implement pagination loading mechanisms.

Error Handling Strategies

Robust applications require comprehensive error handling: graceful degradation when files don't exist, fault tolerance mechanisms for JSON format errors, resource management when memory is insufficient. Detailed logging is recommended for problem troubleshooting.

Extended Application Scenarios

The methods introduced in this article can be extended to other data sources, such as JSON responses from network requests, local database query results, etc. After mastering the core principles, developers can flexibly handle various data display requirements.

Copyright Notice: All rights in this article are reserved by the operators of DevGex. Reasonable sharing and citation are welcome; any reproduction, excerpting, or re-publication without prior permission is prohibited.