JSON with Android
This article describes how to process JSON within Android. It is based on Eclipse 3.6, Java 1.6 and Android 2.3.3 (Gingerbread).
Table of Contents
JSON is a very condense data exchange format. See JSON tutorial for details. The Android platform includes the json.org libraries which allow to work easily with JSON files.
Twitter is a great source for JSON. You can just call a URI and retrieve JSON. Here are some examples:
Table 1. Twitter URIs
URI | Description |
---|---|
https://api.twitter.com/1/statuses/user_timeline/vogella.json | Get the timeline of user vogella. |
http://search.twitter.com/search.json?q=android | Search for the term "android" on Twitter. |
Please note that some URIs return a
JSONObject
object while others return a JSONArray
.Create a new Android project called de.vogella.android.twitter.json with the packagede.vogella.android.twitter.json and the activity called ParseJSON.
Create the following coding for the activity. This will download the twitter feed for the Twitter user called vogella and write the number of entries and the text messages to the Android log file.
package de.vogella.android.twitter.json;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ParseJSON extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
# Just for testing, allow network access in the main thread
# NEVER use this is productive code
StrictMode.ThreadPolicy policy = new StrictMode.
ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
setContentView(R.layout.main);
String readTwitterFeed = readTwitterFeed();
try {
JSONArray jsonArray = new JSONArray(readTwitterFeed);
Log.i(ParseJSON.class.getName(),
"Number of entries " + jsonArray.length());
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
Log.i(ParseJSON.class.getName(), jsonObject.getString("text"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String readTwitterFeed() {
StringBuilder builder = new StringBuilder();
HttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://twitter.com/statuses/user_timeline/vogella.json");
try {
HttpResponse response = client.execute(httpGet);
StatusLine statusLine = response.getStatusLine();
int statusCode = statusLine.getStatusCode();
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
InputStream content = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(content));
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
} else {
Log.e(ParseJSON.class.toString(), "Failed to download file");
}
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
}
To run this example assign the uses-permission to your
AndroidManifest.xml
for "android.permission.INTERNET".Writing JSON is very simple. Just create the JSONObject or JSONArray and use the toString() method.
public void writeJSON() {
JSONObject object = new JSONObject();
try {
object.put("name", "Jack Hack");
object.put("score", new Integer(200));
object.put("current", new Double(152.32));
object.put("nickname", "Hacker");
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println(object);
}
No comments:
Post a Comment