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);