My Blog List

Android FirstAid Coding

A Small Help From a Small Heart
Powered by Blogger.

A software professional, who still likes to code, likes to blog and loves gadgets.

Tuesday, 22 May 2012

How to add EditText to the image in Gallery and also camera activity in android.


Today i will tell about a program which initiate camera to capure an image.
The aim of this program is stated as:



1.Start camera for taking photo.
2.Show all images in a custom gallery.
3.Give appropriate caption for each photo.
4.Click on photo to view in large and can delete it.
5.View the name and caption of all photoes you captured in a dynamic way( TextView created    dynamically).


CameraActivity .java
==========================

package com.rajuandroid;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Hashtable;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;


public class CameraActivity extends Activity {
protected boolean _taken;
protected String _path;
protected static final String PHOTO_TAKEN = "photo_taken";
private  List<String> fileList;
private Button camera;
private Gallery galleryView;
private FileInputStream fs=null;
String lable="label";
String selectedFileNamePath="";
static String externalImagePath="";
private String selectedimage;
private Hashtable<String, String> lableList = new Hashtable<String, String>();
public void refreshImageGallery()
{

galleryView.setAdapter(new ImageAdapter(CameraActivity.this,ReadSDCard()));

}
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        camera=(Button)findViewById(R.id.camera);
    camera.setOnClickListener( new ButtonClickHandler());
    galleryView=( Gallery) findViewById(R.id.galleryview); 
    galleryView.setAdapter(new ImageAdapter(this,ReadSDCard()));    
    galleryView.setOnItemClickListener(new OnItemClickListener() {  
  public void onItemClick(AdapterView<?> parent,View v, final int position, long id) {
  fileList=ReadSDCard();
                 if(fileList != null && !fileList.isEmpty())
  {
                  selectedimage= fileList.get(position).toString();  
                  final Dialog dialog = new Dialog(CameraActivity.this);
                  dialog.setContentView(R.layout.myimage);
                  dialog.setTitle("Full Image Here");
                  dialog.setCancelable(true);
                  ImageView img = (ImageView) dialog.findViewById(R.id.ImageView01);
                  try {
      fs = new FileInputStream(new File(selectedimage));
      } catch (FileNotFoundException e) {      
      e.printStackTrace();
      }
                  Bitmap bm = null;
                  try {
             if(fs!=null)
              bm=BitmapFactory.decodeFileDescriptor(fs.getFD());
                  } catch (IOException e) {           
             e.printStackTrace();
         } finally{ 
             if(fs!=null) {
                 try {
                     fs.close();
                 } catch (IOException e) {                    
                     e.printStackTrace();
                 }
             }
         }
                  img.setImageBitmap( bm );                
                  Button cancel = (Button) dialog.findViewById(R.id.Button01);
                  cancel.setOnClickListener(new OnClickListener() {            
                      public void onClick(View v) {                    
                     dialog.dismiss();
                      }
                  });
                  Button delete = (Button) dialog.findViewById(R.id.Button02);
                  delete.setOnClickListener(new OnClickListener() {            
                      public void onClick(View v) {                
                  AlertDialog.Builder alertbox = new AlertDialog.Builder(CameraActivity.this);
               alertbox.setTitle("Are you sure want to delete this image?");
               alertbox.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface arg0, int arg1) {
               File file = new File( selectedimage);                
               file.delete();
               if(true){              
               Toast.makeText(getApplicationContext(),"Image Deleted", Toast.LENGTH_SHORT).show();                
               }
              refreshImageGallery();
              dialog.dismiss();    
               }


               });
               alertbox.setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface arg0, int arg1) {
               }
               });
               alertbox.show();
                   
                      }
                  });                  
                  //now that the dialog is set up, it's time to show it    
                  dialog.show(); 
  }


  }
     });
    Button showLebel=(Button)findViewById(R.id.next);  
    showLebel.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {                
                Intent intent = new Intent(CameraActivity.this, ShowAllLebels.class); 
                intent.putExtra("allLebelHashTable",lableList); //passing HashTable object
                startActivityForResult(intent,0);
                }
     });
    }
    public class ButtonClickHandler implements View.OnClickListener {
    public void onClick( View view ){    
    startCameraActivity();
          }
    }


    protected void startCameraActivity(){
    externalImagePath = "";
    externalImagePath = Environment.getExternalStorageDirectory() + "/Raju/";
      File dir = new File(externalImagePath);
      try{
      if (!dir.exists()) {
      if(dir.mkdirs()) {
      System.out.println("Directory created");
      } else {
      System.out.println("Directory is not created");
        }  
      }   
      }catch(Exception e){
      e.printStackTrace();
      }
     
    SimpleDateFormat dateFormat = new SimpleDateFormat("HHmmss");
    Date date = new Date();
    String curTime=dateFormat.format(date);    
        _path = Environment.getExternalStorageDirectory() +"/Raju/image"+ curTime +".jpg";
   System.out.println( _path);
   Log.i("MakeMachine", "startCameraActivity()" );
   File file = new File( _path );
   Uri outputFileUri = Uri.fromFile( file );
   Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
   intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );
   startActivityForResult( intent, 0 );
   }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data){
    Log.i( "MakeMachine", "resultCode: " + resultCode );
    switch( resultCode )
    {
    case 0:        
        break;
    case -1:
        onPhotoTaken();
       break;
    }
   
    }
    
    
    protected void onPhotoTaken(){
          Log.i( "MakeMachine", "onPhotoTaken" );
         _taken = true;
          BitmapFactory.Options options = new BitmapFactory.Options();
          options.inSampleSize = 8;
          BitmapFactory.decodeFile( _path, options );
          fileList=ReadSDCard();
          galleryView.setAdapter(new ImageAdapter(this,fileList));           
          
     }


    @Override 
    protected void onRestoreInstanceState( Bundle savedInstanceState){
    Log.i( "MakeMachine", "onRestoreInstanceState()");
    if( savedInstanceState.getBoolean( CameraActivity.PHOTO_TAKEN ) ) {
    onPhotoTaken();
        }
    }


    @Override
    protected void onSaveInstanceState( Bundle outState ) {
    outState.putBoolean( CameraActivity.PHOTO_TAKEN, _taken );
    }
    public class ImageAdapter extends BaseAdapter { 
    int mGalleryItemBackground;  
    private List<String> FileList;
    private LayoutInflater mInflater;
   
    public ImageAdapter(Context c, List<String> fList) {
    FileList = fList;
TypedArray ta = obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = ta.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 1);
ta.recycle();
       mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
    }
   
    public int getCount() {
    if(FileList != null)
    return FileList.size();
      else
      return 0;
    }
   
        public Object getItem(int position) {  
            return position;  
        }   
      
        public long getItemId(int position) {  
            return position;  
        }
        
        public View getView(final int position, View convertView,ViewGroup parent) { 
        final ViewHolder holder;
        if (convertView == null) {
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.mygrid, null);
        holder.imageview = (ImageView) convertView.findViewById(R.id.imagepart);
        holder.edittext = (EditText) convertView.findViewById(R.id.textpart);
        holder.edittext.setFocusable(false);        
          holder.edittext.setId(position);
          holder.edittext.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
TextView title3 = new TextView(CameraActivity.this);
               title3.setText("Make label");
               title3.setPadding(10, 10, 10, 10);
               title3.setGravity(Gravity.CENTER);
               title3.setTextColor(Color.WHITE);
               title3.setHeight(60);
               title3.setTextSize(20);
            final AlertDialog.Builder alert = new AlertDialog.Builder(CameraActivity.this);
            LayoutInflater factory = LayoutInflater.from(CameraActivity.this);
               final View textEntryView = factory.inflate(R.layout.mail_main, null);
            final EditText mTo = (EditText)textEntryView.findViewById(R.id.to);
            if(lableList.containsKey(new File(FileList.get(position).toString()).getName()))              
            mTo.setText(lableList.get(new File(FileList.get(position).toString()).getName()));

            alert.setCustomTitle(title3);
               alert.setView(textEntryView);
               alert.setPositiveButton("Done", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int whichButton) {                    
                  lableList.put(new File(FileList.get(position).toString()).getName(), mTo.getText().toString());
                    holder.edittext.setText(mTo.getText().toString());
                    dialog.cancel();
                   
                   }


               });
               alert.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int whichButton) {
                           dialog.cancel();
                   }
                   });
               alert.show();

    }


    });
      Bitmap bm = null;
                BitmapFactory.Options bfOptions=new BitmapFactory.Options();
                bfOptions.inDither=false;                     //Disable Dithering mode
                bfOptions.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared
                bfOptions.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
                bfOptions.inTempStorage=new byte[16 * 1024];                
                FileInputStream fs1=null;            
                try {
        fs1 = new FileInputStream(new File(FileList.get(position).toString()));
        } catch (FileNotFoundException e) {        
        e.printStackTrace();
        }        
        try {
               if(fs1!=null) 
                bm=BitmapFactory.decodeFileDescriptor(fs1.getFD(), null, bfOptions);
               holder.imageview.setImageBitmap(bm);
               holder.imageview.setScaleType(ImageView.ScaleType.FIT_XY);
holder.imageview.setBackgroundResource(mGalleryItemBackground);
if(lableList.containsKey(new File(FileList.get(position).toString()).getName()))              
                holder.edittext.setText(lableList.get(new File(FileList.get(position).toString()).getName()));
        } catch (IOException e) {                
               e.printStackTrace();
           } finally{ 
               if(fs!=null) {
                   try {
                       fs.close();
                   } catch (IOException e) { e.printStackTrace(); }
               }
           }    
        convertView.setTag(holder);        
    } else {
    holder = (ViewHolder) convertView.getTag();
    }
            return convertView;  
        }
   
    } 
    
    public TypedArray obtainStyledAttributes(int theme) {    
    return null;  
    }
    private List<String> ReadSDCard(){  
    List<String> tFileList = new ArrayList<String>();      
    File f = new File("/sdcard/Raju/");
   
    Log.i("f",""+f);
    if (f.exists()) {
    File[] files=f.listFiles();
    Log.i("files",""+files);
    for(int i=0; i<files.length; i++){  
    File file = files[i];    
    tFileList.add(file.getPath());  
    }    
    return tFileList;  
   
    return null;
    }
    class ViewHolder 
{
   ImageView imageview;
        EditText edittext;        
        int id;
}
}

2.ShowAllLebels.java
=======================

package com.rajuandroid;
import java.io.File;
import java.io.Serializable;
import java.util.HashMap;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TableLayout;
import android.widget.TextView;
public class ShowAllLebels extends Activity {
HashMap<String, String> lableList;
String lable;
TextView txtView;
TableLayout tableLayout1;
RelativeLayout.LayoutParams lay1 = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
@SuppressWarnings("unchecked")
@Override
 public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       Serializable   extras = getIntent().getSerializableExtra("allLebelHashTable");//used to retrive Hashtable object
       if(extras != null){        
        lableList=(HashMap<String, String>) extras;  //here typecasted to HashMap object    
       }
       setContentView(R.layout.show_details);
       tableLayout1 = (TableLayout)findViewById(R.id.tableId1);
    File f = new File("/sdcard/Raju/");
if (f.exists()){
File[] files=f.listFiles();
System.out.println("no of files===="+files.length);
for(int i=0; i<files.length; i++){
File file = files[i];
lable = "";
lable = lableList.get(file.getName());
if(null==lable||"".equalsIgnoreCase(lable)){
lable="NA";
}
txtView = new TextView(ShowAllLebels.this);        
        txtView.setTextColor(Color.YELLOW);
        txtView.setTextSize(15);
        txtView.setTypeface(Typeface.DEFAULT_BOLD);
        txtView.setPadding(5, 5, 5, 5);
        txtView.setText("Name & Lebel:");
        lay1.setMargins(5, 5, 5, 5);
               lay1.addRule(RelativeLayout.RIGHT_OF, txtView.getId());
               tableLayout1.addView(txtView, lay1);
               
               txtView = new TextView(ShowAllLebels.this);        
        txtView.setTextColor(Color.WHITE);
        txtView.setTextSize(15);
        txtView.setTypeface(Typeface.DEFAULT_BOLD);
        txtView.setPadding(40, 5, 40, 0);
        txtView.setText("/sdcard/Raju/"+file.getName());        
        lay1.setMargins(5, 5, 5, 5);
               lay1.addRule(RelativeLayout.BELOW, txtView.getId());
               tableLayout1.addView(txtView, lay1);
               
               txtView = new TextView(ShowAllLebels.this);        
        txtView.setTextColor(Color.RED);
        txtView.setTextSize(15);
        txtView.setTypeface(Typeface.DEFAULT_BOLD);
        txtView.setPadding(40, 5, 40, 0);
        txtView.setText(lable);       
        lay1.setMargins(5, 5, 5, 5);
               lay1.addRule(RelativeLayout.BELOW, txtView.getId());
               tableLayout1.addView(txtView, lay1);
        
          
}
}
txtView = new TextView(ShowAllLebels.this);
        txtView.setPadding(40, 5, 40, 0);        
      lay1.setMargins(5,5,5,10);
             lay1.addRule(RelativeLayout.BELOW, txtView.getId());
             tableLayout1.addView(txtView, lay1);                        
             
}
}

3.layout/main.xml
=============================

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:weightSum="1" android:background="#000000" android:orientation="vertical"   android:layout_height="fill_parent">
    
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
    android:layout_height="70dp"
    android:id="@+id/layoutTop"  
    android:background="#336699"
    >
   
    <ImageView 
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="40dp" 
android:src="@+drawable/logo"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_marginTop="7dp"
      />
 
    </RelativeLayout>
   

  <ScrollView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:fillViewport="true"
  android:layout_below="@+id/layoutTop"
  >
     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
    android:id="@+id/layoutMiddle"    
    android:layout_below="@+id/layoutTop">

    
        <Gallery android:id="@+id/galleryview"
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"       
        /> 
 
<Button
android:id="@+id/camera"  
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/galleryview"
android:layout_margin="10dp"
android:text="  Add  Photo   "
android:layout_centerHorizontal="true"
  
/> 
<Button
android:id="@+id/next"  
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/camera"
android:layout_margin="10dp"
android:text="Show All Lebel"
android:layout_centerHorizontal="true"
  
/>  
     <TextView
        android:layout_width="fill_parent"
        android:layout_height="20dp"
        android:id="@+id/text_view1"
        android:textSize="17sp" 
        android:text=""
        android:layout_margin="20dp"
        android:layout_below="@+id/next"/> 
        
       
       
 </RelativeLayout>  
 </ScrollView>
 
 <RelativeLayout android:id="@+id/footer"
                  android:layout_width="fill_parent"                  
                  android:layout_height="50dp"       
     android:background="#336699"                  
                  android:layout_alignParentBottom="true">
<TextView
android:id="@+id/footer_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="15dp"
android:textSize="10sp"
android:textColor="#ffffff"
android:text="© 2012 RajuAndroidBlog,All rights reserved"
android:textStyle="normal"
/>
          </RelativeLayout>


</RelativeLayout>


4.layout/mail_main.xml
====================================

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


<RelativeLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_marginLeft="3dip"
android:layout_marginRight="3dip">

<EditText android:layout_width="fill_parent"
android:layout_height="wrap_content" 
android:id="@+id/to"
android:layout_marginTop="3dip"
android:layout_marginLeft="3dip"
android:layout_marginRight="3dip"
android:singleLine="true"

></EditText>

</RelativeLayout>


5.layout/mygrid.xml
====================================



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical">
 <ImageView
  android:id="@+id/imagepart"
  android:layout_width="150dp"
  android:layout_height="150dp"
  />
 <EditText
  android:id="@+id/textpart"
  android:layout_width="150dp"
  android:layout_height="40dp"
  android:layout_marginTop="5dp"
  android:cursorVisible="false"
   android:layout_below="@+id/imagepart"/>
</RelativeLayout>


6.layout/myimage.xml
======================

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:background="#000000"
                android:id="@+id/mainlayout">
                <ImageView 
                android:id="@+id/ImageView01" 
                android:layout_width="390dp"              
                android:layout_height="420dp"
                android:scaleType="fitXY"  />
               
               <Button        
                android:text="Delete" 
                android:id="@+id/Button02" 
                android:layout_width="70dp" 
                android:layout_height="40dp"           
                android:layout_alignParentRight="true" 
                />
               <Button android:layout_width="70dp"
                android:id="@+id/Button01" 
                android:layout_height="40dp"
                android:text="Close" 
                android:layout_alignParentTop="true" 
                android:layout_alignParentLeft="true"></Button>
</RelativeLayout>



7.layout/show_details.xml
======================


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

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:weightSum="1" android:background="#000000" android:orientation="vertical" android:layout_height="fill_parent">
    
<!--  Header  Starts-->


          <RelativeLayout
              android:id="@+id/header"
              android:layout_width="fill_parent"
              android:layout_height="70dp"
              android:background="#336699"
              android:paddingBottom="5dip"
              android:paddingTop="5dip" >

              <ImageView
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_centerHorizontal="true"
                  android:layout_marginRight="1dp"
                  android:layout_marginTop="7dp"
                  android:src="@drawable/logo" />
             
          </RelativeLayout>

          <!--  Header Ends -->
          <ScrollView
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:fillViewport="true"
 android:id="@+id/layoutMiddle"    
  android:layout_below="@+id/header"
  android:layout_marginTop="10dp"
  android:layout_marginBottom="20dp"
 >
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/layout2"
    android:layout_below="@+id/layout1"
    android:background="#000000"
    android:layout_marginLeft="2dp"
    android:layout_weight="1"
   
    <TextView 
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:text="Name and Lebel of all Photoes"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:textSize="16sp"
android:textColor="#FFFF00"
android:textStyle="bold"
/>
    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/title"
    android:stretchColumns="1"    
    android:id="@+id/tableId1">
    <TableRow android:id="@+id/rowId1" 
    android:layout_marginLeft="20dp">
        </TableRow>
        </TableLayout>
 
    </RelativeLayout> 
   
     
   </LinearLayout>
</ScrollView>

<RelativeLayout android:id="@+id/footer"
                  android:layout_width="fill_parent"                  
                  android:layout_height="50dp"       
     android:background="#336699"                  
                  android:layout_alignParentBottom="true">
       <TextView
android:id="@+id/footer_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="15dp"
android:textSize="10sp"
android:textColor="#ffffff"
android:text="© 2012 RajuAndroidBlog,All rights reserved"
android:textStyle="normal"
/>
</RelativeLayout>
</RelativeLayout>

8.values/attributes.xml
==================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="Gallery1">
<attr name="android:galleryItemBackground"/>
</declare-styleable>
</resources>

9.In manifest add following lines
=================================
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />      
<uses-permission android:name="android.permission.CAMERA"/>














Friday, 18 May 2012

How to call json webservice android

Today i am going to show you how to call a webservice in android which returns data in a json format.This data will be displayed in a listview using fragment.


1.MainActivity.java

package com.example.parsejson;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.res.Configuration;
import android.os.Bundle; 
public class MainActivity extends  Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     Configuration config = getResources().getConfiguration();
     FragmentManager fragmentManager = getFragmentManager();
     FragmentTransaction fragmentTransaction = 
     fragmentManager.beginTransaction();

     Myfragment pm_fragment = new Myfragment();
        fragmentTransaction.replace(android.R.id.content, pm_fragment);
     fragmentTransaction.commit();
  }
  
   

}

2.Myfragment .java

package com.example.parsejson;

import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

public class Myfragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.v("ListFragment", "onCreateView()");
Log.v("ListContainer", container == null ? "true" : "false");
Log.v("ListsavedInstanceState", savedInstanceState == null ? "true" : "false");
if (container == null) {
return null;
}
View view = inflater.inflate(R.layout.list_view, container, false);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("ListFragment", "onCreate()");
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.v("ListFragment", "onActivityCreated().");
Log.v("ListsavedInstanceState", savedInstanceState == null ? "true" : "false");

new CallAPI().execute();

}

private void displayListView(List<AddressVO> addressList) {
MyCustomAdapter adapter = new MyCustomAdapter(getActivity(), R.layout.row, addressList);
ListView listView = (ListView) getView().findViewById(R.id.listofAddress);
// Assign adapter to ListView
listView.setAdapter(adapter);

}
private class CallAPI extends AsyncTask<String, String, List<AddressVO>> {

JSONParser jsonParser = new JSONParser();
ProgressDialog dialog;
@Override
protected void onPreExecute(){
dialog = ProgressDialog.show(getActivity(), "", "Please wait...");
}

protected List<AddressVO> doInBackground(String... args) {
JSONObject json;
List<AddressVO> listItems = new ArrayList<AddressVO>();  
try {
//https://maps.googleapis.com/maps/api/geocode/json?address=bhubaneswar&sensor=true
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("address", "bhubaneswar"));
params.add(new BasicNameValuePair("sensor", "true"));
json = jsonParser.makeHttpRequest("https://maps.googleapis.com/maps/api/geocode/json", "GET", params);
//System.out.println("json=="+json);

String status = json.getString("status");
//System.out.println(status);
if (status.equals("OK")) {

JSONArray jsonArr = json.getJSONArray("results");
JSONObject jsonObject = jsonArr.getJSONObject(0);
JSONArray jsonsubArr = jsonObject.getJSONArray("address_components");
for (int i = 0;i< jsonsubArr.length();i++) {
JSONObject jsonAddressObject = jsonsubArr.getJSONObject(i);
String long_name = jsonAddressObject.getString("long_name");
String short_name = jsonAddressObject.getString("short_name");
System.out.println(long_name + ""+short_name);

AddressVO addressVO =new AddressVO();
addressVO.setLongName("Long Name : "+long_name);
addressVO.setShortName("Short Name : "+short_name);

listItems.add(addressVO);
}
}
} catch (Exception e1) {
System.out.println(e1);
}
return listItems;
}
protected void onPostExecute(List<AddressVO> addressList) {
dialog.dismiss();

displayListView(addressList);

}
}

}

3.JSONParser .java

package com.example.parsejson;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.SocketTimeoutException;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.json.JSONException;
import org.json.JSONObject;

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET method
public JSONObject makeHttpRequest(String url, String method,
       List<NameValuePair> params) throws Exception {

   // Making HTTP request
   try {

       // check for request method
       if (method == "POST") {
           // request method is POST
           // defaultHttpClient
           DefaultHttpClient httpClient = new DefaultHttpClient();
           HttpPost httpPost = new HttpPost(url);
           httpPost.setEntity(new UrlEncodedFormEntity(params));

           // new
           HttpParams httpParameters = httpPost.getParams();
           // Set the timeout in milliseconds until a connection is
           // established.
           int timeoutConnection = 10000;
           HttpConnectionParams.setConnectionTimeout(httpParameters,
                   timeoutConnection);
           // Set the default socket timeout (SO_TIMEOUT)
           // in milliseconds which is the timeout for waiting for data.
           int timeoutSocket = 10000;
           HttpConnectionParams
                   .setSoTimeout(httpParameters, timeoutSocket);
           // new
           HttpResponse httpResponse = httpClient.execute(httpPost);
           HttpEntity httpEntity = httpResponse.getEntity();
           is = httpEntity.getContent();

       } else if (method == "GET") {
           // request method is GET
           DefaultHttpClient httpClient = new DefaultHttpClient();
           if (params != null) {
            String paramString = URLEncodedUtils.format(params, "utf-8");
           url += "?" + paramString;
}
           
           HttpGet httpGet = new HttpGet(url);
           // new
           HttpParams httpParameters = httpGet.getParams();
           // Set the timeout in milliseconds until a connection is
           // established.
           int timeoutConnection = 10000;
           HttpConnectionParams.setConnectionTimeout(httpParameters,
                   timeoutConnection);
           // Set the default socket timeout (SO_TIMEOUT)
           // in milliseconds which is the timeout for waiting for data.
           int timeoutSocket = 10000;
           HttpConnectionParams
                   .setSoTimeout(httpParameters, timeoutSocket);
           // new
           HttpResponse httpResponse = httpClient.execute(httpGet);
           HttpEntity httpEntity = httpResponse.getEntity();
           is = httpEntity.getContent();
       }

   } catch (UnsupportedEncodingException e) {
       throw new Exception("Unsupported encoding error.");
   } catch (ClientProtocolException e) {
       throw new Exception("Client protocol error.");
   } catch (SocketTimeoutException e) {
       throw new Exception("Sorry, socket timeout.");
   } catch (ConnectTimeoutException e) {
       throw new Exception("Sorry, connection timeout.");
   } catch (IOException e) {
       throw new Exception("I/O error(May be server down).");
   }
   try {
       BufferedReader reader = new BufferedReader(new InputStreamReader(
               is, "iso-8859-1"), 8);
       StringBuilder sb = new StringBuilder();
       String line = null;
       while ((line = reader.readLine()) != null) {
           sb.append(line + "\n");
       }
       is.close();
       json = sb.toString();
   } catch (Exception e) {
       throw new Exception(e.getMessage());
   }

   // try parse the string to a JSON object
   try {
       jObj = new JSONObject(json);
   } catch (JSONException e) {
       throw new Exception(e.getMessage());
   }

   // return JSON String
   return jObj;

}
}
4.MyCustomAdapter .java

package com.example.parsejson;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class MyCustomAdapter extends ArrayAdapter<AddressVO>{

private Context context;
private TextView longNameTv,shortNameTv;
private List<AddressVO> webdata = new ArrayList<AddressVO>();
public MyCustomAdapter(Context context, int textViewResourceId,
List<AddressVO> objects) {
super(context, textViewResourceId, objects);
this.context = context;
this.webdata = objects;
}

public int getCount() {
return this.webdata.size();
}

public AddressVO getItem(int index) {
return this.webdata.get(index);
}

public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
// ROW INFLATION
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.row, parent, false);
}

AddressVO AddressVO = getItem(position);
longNameTv = (TextView) row.findViewById(R.id.longNameTv);
shortNameTv = (TextView) row.findViewById(R.id.shortNameTv);

longNameTv.setText(AddressVO.longName);
shortNameTv.setText(AddressVO.shortName);
return row;
}
}
 5.AddressVO .java

package com.example.parsejson;

public class AddressVO {
public String shortName,longName;

public String getShortName() {
return shortName;
}

public void setShortName(String shortName) {
this.shortName = shortName;
}

public String getLongName() {
return longName;
}

public void setLongName(String longName) {
this.longName = longName;
}
}

6.list_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="JSON parsing content"
        android:textColor="#EA5353"
        android:textSize="20sp" />

    <ListView
        android:id="@+id/listofAddress"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:padding="5dp"
        android:text="rajuandroid.blogspot.com"
        android:textColor="#8853EA"
        android:textSize="20sp" />

</LinearLayout>

7.row.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#CB9D9D"
    android:orientation="vertical" >
    <TextView
        android:id="@+id/longNameTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left"
        android:layout_marginLeft="5dp"
        android:paddingLeft="10dip"
        android:textColor="#000220"
        android:textSize="20sp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/shortNameTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="right"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:paddingLeft="10dip"
        android:textColor="#000000"
        android:textSize="19sp"
        android:textStyle="bold" />

</LinearLayout>

8.manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.parsejson"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="17" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.parsejson.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>




I used this (https://maps.googleapis.com/maps/api/geocode/json?address=bhubaneswar&sensor=true) API to get address detail in a JSON format.The result is looks like below