Android Open Source - 2014-Droid-code Google Search






From Project

Back to project page 2014-Droid-code.

License

The source code is released under:

GNU General Public License

If you think the Android project 2014-Droid-code listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.cookbook.internet.search;
//  ww w .j av  a 2 s.co  m
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.NoSuchAlgorithmException;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
/*
 * GoogleSearch.class
 * 
 * Code from 
 * "The Android Developer's Cookbook: Building Applications With The Android Sdk"
 * By Steele, Dutson, Schwartz, To
 *  
 * http://www.chapters.indigo.ca/books/product/9780321897534-item.html
 * 
 * A lot of mods by P. Campbell October 2013, November 2014 most unmarked
 * 
 * This code uses the google feed api https://developers.google.com/feed/v1/jsondevguide
 * 
 * NOTE the api used here has been deprecated, but it still works and illustrates 
 * using JSONObject and JSONArray with api data.
 * 
 *  I haven't had time to update the example using Google Custom search api.  I will do so soon.  
 */
public class GoogleSearch extends Activity {
  private static final String TAG = "GSEARCH";
  TextView displaytv, counttv;
  EditText ed1;
  Button bt1;
  static String url= "http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        displaytv = (TextView) this.findViewById(R.id.display);
        counttv = (TextView) this.findViewById(R.id.count);
        ed1 = (EditText) this.findViewById(R.id.editText);
        bt1 = (Button) this.findViewById(R.id.submit);
        
        bt1.setOnClickListener(new OnClickListener(){
        public void onClick(View view){
              Boolean netup = netIsUp();
            if(ed1.getText().toString()!=null && netup){        
              try{
                new mygoogleSearch().execute(ed1.getText().toString());
                //processResponse(searchRequest(ed1.getText().toString()));
              }catch(Exception e){
                Log.v(TAG,"Exception:"+e.getMessage());
              }
            }
            if (netup)
              ed1.setText("");
            else
              ed1.setText("Network access problems, check your net.");
        }
      });        
    }
   
  public String SearchRequest(String searchString) throws MalformedURLException, IOException  {
    String newFeed=url+"\""+searchString+"\"";
    StringBuilder response = new StringBuilder();
    Log.v(TAG,"url:"+newFeed);
    URL url = new URL(newFeed);
    
    HttpURLConnection httpconn =(HttpURLConnection) url.openConnection();
    
    if(httpconn.getResponseCode()==HttpURLConnection.HTTP_OK){
      BufferedReader input = new BufferedReader(
          new InputStreamReader(httpconn.getInputStream()), 
          8192);
      String strLine = null;
      while ((strLine = input.readLine()) != null) {
        response.append(strLine);
      }
      input.close();
      httpconn.disconnect();  //PMC
    }
      return response.toString();
  }
  /*
   * In order to read this consider the JSON format the api has chosen
   * https://developers.google.com/feed/v1/jsondevguide
   * match the code to the returned data,
   * Try https://developers.google.com/feed/v1/jsondevguide
   * Try http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=dogs  
   * in jsoneditoronline.org and compare it to the code:
   */
  public void ProcessResponse(String resp)throws IllegalStateException, 
  IOException, JSONException, NoSuchAlgorithmException{
    StringBuilder sb = new StringBuilder();
    Log.v(TAG," result:"+resp);
  
    // {} wrapped in object
    JSONObject mResponseObject = new JSONObject(resp);
  
    // { "responseData": { -> object
    JSONObject responseObject = mResponseObject.getJSONObject("responseData");
    
    // { "responseData": { "results": [ -> array
    JSONArray array = responseObject.getJSONArray("results");
    Log.v(TAG,"number of results returned:"+array.length());
    
    // { "responseData": { "cursor": { "resultCount" 
    JSONObject cursor  = responseObject.getJSONObject("cursor");
    String respcount = cursor.getString("resultCount");
    counttv.setText("Count of Google results: "+respcount + " (the api returns 4)");
    Log.v(TAG,"real number of results:"+respcount);
    
    // walk through the array
    for(int i=0;i<array.length();i++){
      Log.v(TAG, "result ["+i+"] "+array.get(i).toString());
    
      // "results" s an array of objects:
      // { "responseData": { "results": [ {} , {}, ... 
      String title = array.getJSONObject(i).getString("title");
      String urllink = array.getJSONObject(i).getString("visibleUrl");
      // add the data we need to the StringBuilder with html tags
      sb.append(title);
      sb.append("<br>");
      sb.append(urllink);
      sb.append("<br><br> ");
    }
    displaytv.setText(Html.fromHtml(sb.toString()));
  }
  
  private class mygoogleSearch extends AsyncTask<String, Integer, String> {
    
    protected String doInBackground(String... searchKey) {
      
      String key = searchKey[0];

      try{
        return SearchRequest(key);
      }catch(Exception e){
        Log.v(TAG,"Exception:"+e.getMessage());
        return "";  
      }
    }    
    protected void onPostExecute(String result) {
      try{
        ProcessResponse(result);
      }catch(Exception e){
        Log.v(TAG,"Exception:"+e.getMessage());
            
      }    
    }
  }
  private boolean netIsUp() {
    ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    // getActiveNetworkInfo() each time as the network may swap as the
    // device moves
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
    // ALWAYS check isConnected() before initiating network traffic
    if (networkInfo != null) 
      return networkInfo.isConnected();
    else
      return false;
  } //netIsUp()
    
}




Java Source Code List

ca.campbell.httpexample.HttpExample.java
ca.campbell.httpexamplepost.HttpsExamplePOST.java
ca.campbell.layoutprogrammatically.MainActivity.java
ca.campbell.networkcheckstatus.MainActivity.java
ca.campbell.optionsmenu.Activity2.java
ca.campbell.optionsmenu.Activity2.java
ca.campbell.optionsmenu.Activity3.java
ca.campbell.optionsmenu.MainActivity.java
ca.campbell.optionsmenu.MainActivity.java
ca.campbell.simplegridview.MainActivity.java
ca.campbell.week2_rw_views.Activity2.java
ca.campbell.week2_rw_views.MainActivity.java
com.androidbook.simpleasync.ChoiceActivity.java
com.androidbook.simpleasync.SimpleAsyncActivity.java
com.androidbook.simpleasync.SimpleNoBGThread.java
com.androidbook.simpleasync.SimpleThreadActivity.java
com.cookbook.internet.search.GoogleSearch.java
com.introtoandroid.simplefragments.FieldNoteListFragment.java
com.introtoandroid.simplefragments.FieldNoteViewActivity.java
com.introtoandroid.simplefragments.FieldNoteWebViewFragment.java
com.introtoandroid.simplefragments.SimpleFragmentsActivity.java
com.introtoandroid.simplelayout.FrameLayoutActivity.java
com.introtoandroid.simplelayout.GridLayoutActivity.java
com.introtoandroid.simplelayout.LinearLayoutActivity.java
com.introtoandroid.simplelayout.MenuActivity.java
com.introtoandroid.simplelayout.MultipleLayoutActivity.java
com.introtoandroid.simplelayout.RelativeLayoutActivity.java
com.introtoandroid.simplelayout.SimpleLayoutActivity.java
com.introtoandroid.simplelayout.TableLayoutActivity.java
com.introtoandroid.viewsamples.ButtonsActivity.java
com.introtoandroid.viewsamples.ContainersActivity.java
com.introtoandroid.viewsamples.EventsActivity.java
com.introtoandroid.viewsamples.FormsActivity.java
com.introtoandroid.viewsamples.IndicatorsActivity.java
com.introtoandroid.viewsamples.MenuActivity.java
com.introtoandroid.viewsamples.PickersActivity.java
com.introtoandroid.viewsamples.TextDisplayActivity.java
com.introtoandroid.viewsamples.TextInputActivity.java
com.introtoandroid.viewsamples.ViewSampleActivity.java
cs518.sample.activityLifecycle.Activity2.java
cs518.sample.activityLifecycle.MyActivityLifeCycleActivity.java
cs518.sample.database.AddStudent.java
cs518.sample.database.DBHelper.java
cs518.sample.database.DatabaseActivity.java
cs518.sample.database.Thirty.java
cs518.sample.dbcursoradapter.AddStudent.java
cs518.sample.dbcursoradapter.DBHelper.java
cs518.sample.dbcursoradapter.DatabaseActivity.java
cs518.sample.dbcursoradapter.Thirty.java
cs518.sample.localisation.MainActivity.java
cs518.sample.multiactivity.Activity1.java
cs518.sample.multiactivity.Activity2.java
cs518.sample.multiactivity.Activity3.java
cs518.sample.multiactivity.Activity4.java
cs518.sample.multiactivity.Activity5.java
cs518.sample.multiactivity.Activity6.java
cs518.sample.multiactivity.Constants.java
cs518.sample.usecalendarcontentprovider.MainActivity.java
cs518.sample.usecontactcontentprovider.MainActivity.java
cs518.sample.usecontactcontentprovidercursorloader2.MainActivity.java
cs518.sample.usemediastorecontentprovider.MainActivity.java
cs518.samples.imageswap.MainActivity.java
cs518.samples.sharedpreferences.MainActivity.java
cs534.sample.dbAsyncTask.AddStudent.java
cs534.sample.dbAsyncTask.DBHelper.java
cs534.sample.dbAsyncTask.DatabaseActivity.java
cs534.sample.dbAsyncTask.Thirty.java
cs534.sample.implicitintents.MainActivity.java
cs534.sample.multithread.MultiThread.java
cs534.sample.simplelistview.SimpleLV.java
cs534.samples.simplestlv.MainActivity.java