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:
{
"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"
}
}
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).
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.
Activity: (Tutorial, should work)
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<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();
// 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 < 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<String, String> map = new HashMap<String, String>();
// adding each child node to HashMap key => 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<?> 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);
}
});
}
}
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 :)
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 <String> 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());
}
}
Thank you very much guys!