Want more features on Pastebin? Sign Up, it's FREE!
Guest

JSON Parsing Full Try-Catch

By: bmote on Apr 4th, 2011  |  syntax: Java  |  size: 6.08 KB  |  views: 1,848  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package com.javacodegeeks.android.json;
  2.  
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.InputStreamReader;
  6. import java.io.Reader;
  7. import java.util.List;
  8.  
  9. import org.apache.http.HttpEntity;
  10. import org.apache.http.HttpResponse;
  11. import org.apache.http.HttpStatus;
  12. import org.apache.http.client.ClientProtocolException;
  13. import org.apache.http.client.methods.HttpGet;
  14. import org.apache.http.impl.client.DefaultHttpClient;
  15.  
  16. import android.app.Activity;
  17. import android.content.Context;
  18. import android.os.AsyncTask;
  19. import android.os.Bundle;
  20. import android.util.Log;
  21. import android.view.View;
  22. import android.widget.Button;
  23. import android.widget.Toast;
  24.  
  25. import com.google.gson.Gson;
  26. import com.google.gson.JsonIOException;
  27. import com.google.gson.JsonSyntaxException;
  28. import com.javacodegeeks.android.json.model.Result;
  29. import com.javacodegeeks.android.json.model.SearchResponse;
  30.  
  31. public class JsonParsingActivity extends Activity {
  32.  
  33.     private static final String url = "http://search.twitter.com/search.json?q=javacodegeeks";
  34.     protected InitTask _initTask;
  35.  
  36.     @Override
  37.     public void onCreate(Bundle savedInstanceState) {
  38.         super.onCreate(savedInstanceState);
  39.         setContentView(R.layout.main);
  40.        
  41.         Button button = (Button)findViewById(R.id.button1);
  42.         button.setOnClickListener(new View.OnClickListener() {
  43.             public void onClick(View v) {
  44.                 _initTask = new InitTask();
  45.                 _initTask.execute( getApplicationContext() );
  46.             }
  47.         });
  48.     }
  49.  
  50.     @Override
  51.     public void onStop() {
  52.         super.onStop();
  53.         _initTask.cancel(true);
  54.     }
  55.  
  56.     protected class InitTask extends AsyncTask<Context, String, SearchResponse>
  57.     {
  58.         @Override
  59.         protected SearchResponse doInBackground( Context... params )
  60.         {
  61.             InputStream source = retrieveStream(url);
  62.             SearchResponse response = null;
  63.             if (source != null) {
  64.                 Gson gson = new Gson();
  65.                 Reader reader = new InputStreamReader(source);
  66.                 try {
  67.                     response = gson.fromJson(reader, SearchResponse.class);
  68.                     publishProgress( response.query );
  69.                 } catch (JsonSyntaxException e) {
  70.                     Log.w(getClass().getSimpleName(), "Error: " + e.getMessage() + " for URL " + url);
  71.                     return null;
  72.                 } catch (JsonIOException e) {
  73.                     Log.w(getClass().getSimpleName(), "Error: " + e.getMessage() + " for URL " + url);
  74.                     return null;
  75.                 } finally {
  76.                     try {
  77.                         reader.close();
  78.                     } catch (IOException e) {
  79.                         Log.w(getClass().getSimpleName(), "Error: " + e.getMessage() + " for URL " + url);
  80.                     }
  81.                 }
  82.             }
  83.             if (!this.isCancelled()) {
  84.                 return response;
  85.             } else {
  86.                 return null;
  87.             }
  88.         }
  89.  
  90.         @Override
  91.         protected void onProgressUpdate(String... s)
  92.         {
  93.             super.onProgressUpdate(s);
  94.             Toast.makeText(getApplicationContext(), s[0], Toast.LENGTH_SHORT).show();
  95.         }
  96.  
  97.         @Override
  98.         protected void onPostExecute( SearchResponse response )
  99.         {
  100.             super.onPostExecute(response);
  101.             StringBuilder builder = new StringBuilder();
  102.             if (response != null) {
  103.                 String delim = "* ";
  104.                 List<Result> results = response.results;
  105.                 for (Result result : results) {
  106.                     builder.append(delim).append(result.fromUser);
  107.                     delim="\n* ";
  108.                 }
  109.             }
  110.             if (builder.length() > 0) {
  111.                 Toast.makeText(getApplicationContext(), builder.toString(), Toast.LENGTH_SHORT).show();
  112.             } else {
  113.                 Toast.makeText(getApplicationContext(), "The response was empty.", Toast.LENGTH_SHORT).show();
  114.             }
  115.            
  116.         }
  117.        
  118.         @Override
  119.         protected void onCancelled() {
  120.             super.onCancelled();
  121.             Toast.makeText(getApplicationContext(), "The operation was cancelled.", 1).show();
  122.         }
  123.  
  124.         private InputStream retrieveStream(String url) {
  125.             DefaultHttpClient client = new DefaultHttpClient();
  126.             HttpGet getRequest;
  127.             try {
  128.                 getRequest = new HttpGet(url);
  129.                 try {
  130.                     HttpResponse getResponse = client.execute(getRequest);
  131.                     final int statusCode = getResponse.getStatusLine().getStatusCode();
  132.                     if (statusCode != HttpStatus.SC_OK) {
  133.                         Log.w(getClass().getSimpleName(), "Error " + statusCode + " for URL " + url);
  134.                         return null;
  135.                     }
  136.                     HttpEntity getResponseEntity = getResponse.getEntity();
  137.                     try {
  138.                         return getResponseEntity.getContent();
  139.                     } catch (IllegalStateException e) {
  140.                         getRequest.abort();
  141.                         Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  142.                         return null;
  143.                     } catch (IOException e) {
  144.                         getRequest.abort();
  145.                         Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  146.                         return null;
  147.                     }
  148.                 } catch (ClientProtocolException e) {
  149.                     getRequest.abort();
  150.                     Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  151.                 } catch (IOException e) {
  152.                     getRequest.abort();
  153.                     Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  154.                 }
  155.             } catch (IllegalArgumentException e) {
  156.                 Log.w(getClass().getSimpleName(), "Error for URL " + url, e);
  157.             }
  158.             return null;
  159.         }
  160.  
  161.     }
  162.  
  163. }
clone this paste RAW Paste Data