Android How can I read json file(text file) from SD Card and display data into textview [duplicate] Android How can I read json file(text file) from SD Card and display data into textview [duplicate] json json

Android How can I read json file(text file) from SD Card and display data into textview [duplicate]


Read the JSON file using File from SD card and use JSONObject to parse it.

Here a starting code:

    import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;public class ReadJsonFile {public ReadFile (){             try {            File yourFile = new File(Environment.getExternalStorageDirectory(), "path/to/the/file/inside_the_sdcard/textarabics.txt");            FileInputStream stream = new FileInputStream(yourFile);            String jsonStr = null;            try {                FileChannel fc = stream.getChannel();                MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());                jsonStr = Charset.defaultCharset().decode(bb).toString();              }              catch(Exception e){              e.printStackTrace();              }              finally {                stream.close();              }/*  String jsonStr = "{\n\"data\": [\n    {\n        \"id\": \"1\",\n        \"title\": \"Farhan Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"2\",\n        \"title\": \"Noman Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"3\",\n        \"title\": \"Ahmad Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"4\",\n        \"title\": \"Mohsin Shah\",\n        \"duration\": 10\n    },\n    {\n        \"id\": \"5\",\n        \"title\": \"Haris Shah\",\n        \"duration\": 10\n    }\n  ]\n\n}\n";  */                      JSONObject jsonObj = new JSONObject(jsonStr);                // Getting data JSON Array nodes                JSONArray data  = jsonObj.getJSONArray("data");                // looping through All nodes                for (int i = 0; i < data.length(); i++) {                    JSONObject c = data.getJSONObject(i);                    String id = c.getString("id");                    String title = c.getString("title");                    String duration = c.getString("duration");                    //use >  int id = c.getInt("duration"); if you want get an int                    // tmp hashmap for single node                    HashMap<String, String> parsedData = new HashMap<String, String>();                    // adding each child node to HashMap key => value                    parsedData.put("id", id);                    parsedData.put("title", title);                    parsedData.put("duration", duration);                    // do what do you want on your interface                  }           } catch (Exception e) {           e.printStackTrace();          }     }}

Ddon't forget to add read storage on your mainfest:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />


get the file contents like this:

File yourFile = new File("/mnt/extSdCard/test.json");        FileInputStream stream = new FileInputStream(yourFile);        String jString = null;        try {            FileChannel fc = stream.getChannel();            MappedByteBuffer bb = fc.map(FileChannel.MapMode.READ_ONLY, 0, fc.size());            /* Instead of using default, pass in a decoder. */            jString = Charset.defaultCharset().decode(bb).toString();          }          finally {            stream.close();          }

parse and add to listview:

String[] from = new String[] {"title"};int[] to = new int[] { R.id.name};List<HashMap<String, String>> fillMaps = new ArrayList<HashMap<String, String>>();try {    JSONArray names = new JSONArray(jsonString);    Log.i("MyList","Number of names " + names.length());    for (int j = 0; j < names.length(); j++)     {         JSONObject jsonObject = names.getJSONObject(j);         HashMap<String, String> map = new HashMap<String, String>();         map.put("title", jsonObject.getString("title"));         fillMaps.add(map);    }} catch (Exception e) {    e.printStackTrace();}SimpleAdapter adapter = new SimpleAdapter(context, fillMaps, R.layout.result, from, to);mListView.setAdapter(adapter);

Here mListView is your predefined ListView.


Following may be useful, which I have taken from android developer site.

In order to read or write files on the external storage, your app must acquire the READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE system permissions.

You can set the permissions in your manifest file like this:

<manifest ...>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />    ...</manifest>

Here are a couple methods you can use to check the availability:

/* Checks if external storage is available for read and write */public boolean isExternalStorageWritable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state)) {        return true;    }    return false;}/* Checks if external storage is available to at least read */public boolean isExternalStorageReadable() {    String state = Environment.getExternalStorageState();    if (Environment.MEDIA_MOUNTED.equals(state) ||        Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {        return true;    }    return false;}

Read the file content as given below. After that you can process,

final File file = new File(Environment.getExternalStorageDirectory()                          .getAbsolutePath(), filename);