Note that there are some explanatory texts on larger screens.

plurals
  1. POConvert JSON String into JSON Array and show in ListView
    text
    copied!<p>in working on an app for a site. I've been trying to solve this problem for a week or so, asking around googleing a LOT! And i cant seem to find a solution. I have a JSON String which is: </p> <pre><code>{ "error":"", "S8tf":{ "infoToken":"wCfhXe", "deleteToken":"gzHTfGcF", "size":122484, "sha1":"8c4e2bbc0794d2bd4f901a36627e555c068a94e6", "filename":"Screen_Shot_2013-07-02_at_3.52.23_PM.png" }, "S29N":{ "infoToken":"joRm6p", "deleteToken":"IL5STLhq", "size":129332, "sha1":"b4a03897121d0320b82059c36f7a10a8ef4c113d", "filename":"Stockholmsyndromet.docx" } } </code></pre> <p>I want it do be something like a JSON Array so i dont have to search for "S8tf" and "S29N" Since this is randomly generated by server. If you know what i mean? (bad at explaining). </p> <p>I cant seem to get all the information from "error" and show it. I've tried anything, and still i cant seem to figure it out.</p> <p>Activity: (Tutorial, should work)</p> <pre><code>package com.androidhive.jsonparsing; import java.util.ArrayList; import java.util.HashMap; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListAdapter; import android.widget.ListView; import android.widget.SimpleAdapter; import android.widget.TextView; public class AndroidJSONParsingActivity extends ListActivity { // url to make request private static String url = "http://api.bayfiles.net/v1/account/files?session=7je10rvdhr1mcvjam75hetaul0"; // JSON Node names private static final String TAG_CONTACTS = "error"; private static final String TAG_ID = "id"; private static final String TAG_NAME = "name"; private static final String TAG_EMAIL = "email"; private static final String TAG_ADDRESS = "address"; private static final String TAG_GENDER = "gender"; private static final String TAG_PHONE = "phone"; private static final String TAG_PHONE_MOBILE = "mobile"; private static final String TAG_PHONE_HOME = "home"; private static final String TAG_PHONE_OFFICE = "office"; // contacts JSONArray JSONArray contacts = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Hashmap for ListView ArrayList&lt;HashMap&lt;String, String&gt;&gt; contactList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;(); // Creating JSON Parser instance JSONParser jParser = new JSONParser(); // getting JSON string from URL JSONObject json = jParser.getJSONFromUrl(url); try { // Getting Array of Contacts contacts = json.getJSONArray(TAG_CONTACTS); // looping through All Contacts for(int i = 0; i &lt; contacts.length(); i++){ JSONObject c = contacts.getJSONObject(i); // Storing each json item in variable String id = c.getString(TAG_ID); String name = c.getString(TAG_NAME); String email = c.getString(TAG_EMAIL); String address = c.getString(TAG_ADDRESS); String gender = c.getString(TAG_GENDER); // Phone number is agin JSON Object JSONObject phone = c.getJSONObject(TAG_PHONE); String mobile = phone.getString(TAG_PHONE_MOBILE); String home = phone.getString(TAG_PHONE_HOME); String office = phone.getString(TAG_PHONE_OFFICE); // creating new HashMap HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(); // adding each child node to HashMap key =&gt; value map.put(TAG_ID, id); map.put(TAG_NAME, name); map.put(TAG_EMAIL, email); map.put(TAG_PHONE_MOBILE, mobile); // adding HashList to ArrayList contactList.add(map); } } catch (JSONException e) { e.printStackTrace(); } /** * Updating parsed JSON data into ListView * */ ListAdapter adapter = new SimpleAdapter(this, contactList, R.layout.list_item, new String[] { TAG_NAME, TAG_EMAIL, TAG_PHONE_MOBILE }, new int[] { R.id.name, R.id.email, R.id.mobile }); setListAdapter(adapter); // selecting single ListView item ListView lv = getListView(); // Launching new screen on Selecting Single ListItem lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView&lt;?&gt; parent, View view, int position, long id) { // getting values from selected ListItem String name = ((TextView) view.findViewById(R.id.name)).getText().toString(); String cost = ((TextView) view.findViewById(R.id.email)).getText().toString(); String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString(); // Starting new intent Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class); in.putExtra(TAG_NAME, name); in.putExtra(TAG_EMAIL, cost); in.putExtra(TAG_PHONE_MOBILE, description); startActivity(in); } }); } } </code></pre> <p>EDIT: I know how irritating it is to see that the OP got it working, but without any kind of code what so ever. So i'll post the code which worked for me :)</p> <pre><code>public class FilesActivity extends SherlockListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.dblist); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle("Files"); String response = null; DefaultHttpClient httpClient = new DefaultHttpClient(); ResponseHandler &lt;String&gt; resonseHandler = new BasicResponseHandler(); HttpPost postMethod = new HttpPost("URL"); try { JSONObject json = new JSONObject(); json.put("filename", "error"); //json.put("Fiedl2", ""); postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8"))); postMethod.setHeader( "Content-Type", "application/json" ); response = httpClient.execute(postMethod,resonseHandler); TextView txt = (TextView)findViewById(R.id.nodata); //JSONObject mJsonObject = new JSONObject(response); //JSONObject userJObject = mJsonObject.getJSONObject("error"); JSONObject request = new JSONObject(response); for (Iterator keyIterator = request.keys(); keyIterator.hasNext(); ) { // will be set to "S29N", "S8tf", "error" etc String key = (String) keyIterator.next(); // will get value if it's an JSONObject or null if it's not JSONObject object = request.optJSONObject(key); if (object != null) { //doSomething(object); // ← process the object txt.setText(object.toString()); Log.d("log_tag", object.toString()); } } } catch(Exception e) { e.printStackTrace(); Log.d("log_tag", "Error: " + e.toString()); } } </code></pre> <p>Thank you very much guys!</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload