Parse JSON returned from Flickr Services - Blog Android

Wednesday, 6 July 2011

Parse JSON returned from Flickr Services

Further work on the last exercise "Access Flickr API using HttpClient", a method ParseJSON() is implemented to parse the JSON returned from Flickr Services.



Parse JSON returned from Flickr Services



package com.exercise.AndroidFlickr;



import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.Reader;



import org.apache.http.HttpEntity;

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.JSONException;

import org.json.JSONObject;



import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.TextView;



public class AndroidFlickrActivity extends Activity {



/*

* FlickrQuery = FlickrQuery_url

* + FlickrQuery_per_page

* + FlickrQuery_nojsoncallback

* + FlickrQuery_format

* + FlickrQuery_tag + q

* + FlickrQuery_key + FlickrApiKey

*/



String FlickrQuery_url = "http://api.flickr.com/services/rest/?method=flickr.photos.search";

String FlickrQuery_per_page = "&per_page=1";

String FlickrQuery_nojsoncallback = "&nojsoncallback=1";

String FlickrQuery_format = "&format=json";

String FlickrQuery_tag = "&tags=";

String FlickrQuery_key = "&api_key=";



// Apply your Flickr API:

// www.flickr.com/services/apps/create/apply/?

String FlickrApiKey = "2155e9406043b7494453105eec99ae37";



EditText searchText;

Button searchButton;

TextView textQueryResult, textJsonResult;



/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);



searchText = (EditText)findViewById(R.id.searchtext);

searchButton = (Button)findViewById(R.id.searchbutton);

textQueryResult = (TextView)findViewById(R.id.queryresult);

textJsonResult = (TextView)findViewById(R.id.jsonresult);



searchButton.setOnClickListener(searchButtonOnClickListener);

}



private Button.OnClickListener searchButtonOnClickListener

= new Button.OnClickListener(){



public void onClick(View arg0) {

// TODO Auto-generated method stub

String searchQ = searchText.getText().toString();

String searchResult = QueryFlickr(searchQ);

textQueryResult.setText(searchResult);

String jsonResult = ParseJSON(searchResult);

textJsonResult.setText(jsonResult);

}};



private String QueryFlickr(String q){



String qResult = null;



String qString =

FlickrQuery_url

+ FlickrQuery_per_page

+ FlickrQuery_nojsoncallback

+ FlickrQuery_format

+ FlickrQuery_tag + q

+ FlickrQuery_key + FlickrApiKey;



HttpClient httpClient = new DefaultHttpClient();

HttpGet httpGet = new HttpGet(qString);



try {

HttpEntity httpEntity = httpClient.execute(httpGet).getEntity();



if (httpEntity != null){

InputStream inputStream = httpEntity.getContent();

Reader in = new InputStreamReader(inputStream);

BufferedReader bufferedreader = new BufferedReader(in);

StringBuilder stringBuilder = new StringBuilder();



String stringReadLine = null;



while ((stringReadLine = bufferedreader.readLine()) != null) {

stringBuilder.append(stringReadLine + "\n");

}



qResult = stringBuilder.toString();



}



} catch (ClientProtocolException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



return qResult;

}



private String ParseJSON(String json){



String jResult = null;



try {

JSONObject JsonObject = new JSONObject(json);

JSONObject Json_photos = JsonObject.getJSONObject("photos");

JSONArray JsonArray_photo = Json_photos.getJSONArray("photo");



//We have only one photo in this exercise

JSONObject FlickrPhoto = JsonArray_photo.getJSONObject(0);



jResult = "\nid: " + FlickrPhoto.getString("id") + "\n"

+ "owner: " + FlickrPhoto.getString("owner") + "\n"

+ "secret: " + FlickrPhoto.getString("secret") + "\n"

+ "server: " + FlickrPhoto.getString("server") + "\n"

+ "farm: " + FlickrPhoto.getString("farm") + "\n"

+ "title: " + FlickrPhoto.getString("title") + "\n";



} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}



return jResult;



}

}





Modify main.xml to add a TextView, jsonresult, to display the parsed JSON data.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

<EditText

android:id="@+id/searchtext"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<Button

android:id="@+id/searchbutton"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="Search"

/>

<TextView

android:id="@+id/queryresult"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

<TextView

android:id="@+id/jsonresult"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>

</LinearLayout>





next:

- Load photo from Flickr



Related article:

- Get Time Zone of location, from web service of www.geonames.org




Borneo08

About Borneo08

Author Description here.. Nulla sagittis convallis. Curabitur consequat. Quisque metus enim, venenatis fermentum, mollis in, porta et, nibh. Duis vulputate elit in elit. Mauris dictum libero id justo.

Subscribe to this Blog via Email :

More links

Related Posts Plugin for WordPress, Blogger...