Thursday, March 31, 2016

Select Image from Gallery , Upload & Retrieve @ with SQLite Data Base in Android

" Jai Saraswati Maa"
Hi .... Dear All ....  Today I am uploading a superb example of Image with SQLite Database
In this example you can select image from your Gallery, Can also upload into Data Base and Retrieve from DB.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box

@@@@ please add read write permission in manifest file like

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

A. Main Layout



B. activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
   xmlns:tools="http://schemas.android.com/tools"  
   android:layout_width="match_parent" 
   android:layout_height="match_parent"   
 tools:context="com.exam.ravi.sqlimagemyex1.MainActivity" >
    <RelativeLayout        
   android:layout_width="match_parent"     
   android:layout_height="match_parent"    
    android:layout_alignParentTop="true"    
    android:layout_alignParentStart="true">

    <Button       
 android:layout_width="wrap_content"  
      android:layout_height="wrap_content"    
      android:text="Select Image"      
     android:id="@+id/btnSelect"       
     android:onClick="selectImage"   
     android:layout_alignTop="@+id/btnUpload"     
   android:layout_alignParentStart="true" />

    <ImageView       
       android:layout_width="wrap_content"    
       android:layout_height="150dp" 
       android:id="@+id/imageView"   
       android:src="@mipmap/ic_launcher"  
       android:layout_below="@+id/btnUpload"   
       android:layout_centerHorizontal="true" />

    <Button       
   android:layout_width="wrap_content"   
   android:layout_height="wrap_content"     
   android:text="Upload  Image"  
   android:id="@+id/btnUpload"     
   android:onClick="uploadImage"   
   android:layout_marginTop="0dp"  
   android:layout_alignParentTop="true"   
   android:layout_alignParentEnd="true" />

    <Button   
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"     
     android:text="Retrieve Image"     
     android:id="@+id/button"      
     android:onClick="retImage"    
     android:layout_below="@+id/imageView"     
     android:layout_centerHorizontal="true"      
     android:layout_marginTop="67dp" />

    <ImageView      
      android:layout_width="wrap_content"   
      android:layout_height="wrap_content"     
      android:id="@+id/imageView2"    
      android:src="@mipmap/ic_launcher"    
      android:layout_alignParentBottom="true"  
      android:layout_alignStart="@+id/imageView"  
      android:layout_marginTop="300dp" />
</RelativeLayout>
</ScrollView>

C. MainActivity.java

package com.exam.ravi.sqlimagemyex1;

import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileNotFoundException;

public class MainActivity extends AppCompatActivity {
    ImageView imageView,imageview2;
    String realPath=null;
    Bitmap bitmap = null;
    byte img[];
    private MyDataBase mdb=null;
    private SQLiteDatabase db=null;
    private Cursor c=null;
    private static final String DATABASE_NAME = "ImageDb.db";
    public static final int DATABASE_VERSION = 1;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageview2 = (ImageView) findViewById(R.id.imageView2);

        mdb=new MyDataBase(getApplicationContext(), DATABASE_NAME,null,
                                                   DATABASE_VERSION);

    }
    public void selectImage(View view)
    {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");
        startActivityForResult(intent,0);
    }

    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(resultCode== Activity.RESULT_OK && data !=null)
        {
           realPath = RealPathUtil.getRealPath(this,data.getData());
        }
        setMyImage(realPath);
    }
    public void setMyImage(String realP)
    {
        Uri uriFromPath = Uri.fromFile(new File(realP));
        try        {
            bitmap = BitmapFactory.decodeStream(getContentResolver().
                                          openInputStream(uriFromPath));
        } catch (FileNotFoundException e) {
            Toast.makeText(this,"Exception Generated",Toast.LENGTH_LONG).show();
        }
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,100,bos);
        img = bos.toByteArray();
        imageView.setImageBitmap(bitmap);
    }
   @SuppressWarnings("deprecation")
   public void uploadImage(View view)
   {
       db=mdb.getWritableDatabase();
       ContentValues cv = new ContentValues();
       cv.put("image", img);
       db.insert("tableimage", null, cv);
       imageView.setAlpha(0);
       Toast.makeText(this, "inserted successfully", Toast.LENGTH_SHORT).show();

   }
    public void retImage(View view)
    {
        String[] col={"image"};
        db=mdb.getReadableDatabase();
        c=db.query("tableimage", col, null, null, null, null, null);
        if(c!=null){
            c.moveToFirst();
            do{
                img=c.getBlob(c.getColumnIndex("image"));
            }while(c.moveToNext());
        }
        Bitmap b1=BitmapFactory.decodeByteArray(img, 0, img.length);

        imageview2.setImageBitmap(b1);
        Toast.makeText(this, "Retrive successfully", Toast.LENGTH_SHORT).show();
    }
}

D. RealPathUtil.java   
package com.exam.ravi.sqlimagemyex1;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.DocumentsContract;
import android.provider.MediaStore;

public class RealPathUtil {
    public static String getRealPath(Context context,Uri uri)
    {
        String filePath="";
        String wholeID = DocumentsContract.getDocumentId(uri);
         String id = wholeID.split(":")[1];
        String[] column = {MediaStore.Images.Media.DATA};
        String sel = MediaStore.Images.Media._ID + "=?";

        Cursor cursor = context.getContentResolver().query
                      (MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                       column, sel, new String[]{id}, null);

        int columnIndex = cursor.getColumnIndex(column[0]);

        if (cursor.moveToFirst()) {
            filePath = cursor.getString(columnIndex);
        }
        cursor.close();
        return filePath;
    }
}

E. MyDataBase.java

package com.exam.ravi.sqlimagemyex1;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDataBase extends SQLiteOpenHelper {

    public MyDataBase(Context context, String dbname, 
                      SQLiteDatabase.CursorFactory factory, int dbversion) {
        super(context, dbname, factory, dbversion);
    }

    @Override    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table tableimage(image blob);");
    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

}

Wednesday, March 30, 2016

Difference Between Two Dates in Android

"Jai Saraswati Maa"
Hi..... Dear All we are trying to provide here some examples  of Android App Related....
Hope you would Like..........
This example will display the date difference
We are using Android Studio 1.5.1
Minimum API 19 and Target API is 23
Credit goes to Vipul Walia (Student)
 A- Basic Layout


B - Layout file activity_main.xml is
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   
     xmlns:tools="http://schemas.android.com/tools"    
     android:layout_width="match_parent"    
     android:layout_height="match_parent"   
     android:orientation="vertical"    
     tools:context="com.exam.ravi.datedifferenceex1.MainActivity">

    <Button        
       android:id="@+id/changeDate"  
       android:layout_width="match_parent" 
       android:layout_height="wrap_content"   
       android:text="Check-In-Date"      
       android:layout_gravity="center_horizontal"  
       android:layout_marginLeft="15dp" 
       android:layout_marginRight="15dp"        
       android:layout_marginTop="15dp" />

    <TextView     
        android:id="@+id/Output" 
        android:layout_width="wrap_content"      
        android:layout_height="wrap_content"     
        android:text=""        
        android:hint="M-D-YYYY"        
        android:textAppearance="?android:attr/textAppearanceLarge"      
        android:layout_gravity="center_horizontal"     
        android:layout_marginTop="20dp" />
    <Button        
   android:id="@+id/changeDate1"        android:layout_width="match_parent"     
   android:layout_height="wrap_content"        android:text="Check-Out-Date"        
   android:layout_gravity="center_horizontal"        android:layout_marginTop="15dp"        
   android:layout_marginLeft="15dp"        android:layout_marginRight="15dp" />

    <TextView 
       android:id="@+id/Output2"        android:layout_width="wrap_content"       
       android:layout_height="wrap_content"        android:text=""       
       android:hint="M-D-YYYY"        
       android:textAppearance="?android:attr/textAppearanceLarge" 
       android:layout_gravity="center_horizontal"       
       android:layout_marginTop="20dp" />

    <Button    
    android:layout_width="fill_parent"       
    android:layout_height="wrap_content"        android:text="Difference"      
    android:id="@+id/button"        android:layout_marginTop="20dp"       
    android:onClick="showDiff"        android:layout_marginLeft="15dp"      
    android:layout_marginRight="15dp" />

    <TextView   
     android:id="@+id/output3"        android:layout_width="wrap_content"       
     android:layout_height="wrap_content"        
     android:textAppearance="?android:attr/textAppearanceLarge"       
     android:hint="Difference is"        android:layout_gravity="center_horizontal"      
     android:layout_marginTop="30dp" />

</LinearLayout>

C- MainActivity.java is

package com.exam.ravi.datedifferenceex1;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.Toast;

@SuppressWarnings("ALL")
public class MainActivity extends AppCompatActivity {

     TextView Output1;
     Button changeDate1;
     int year1,year2;
     int month1,month2;
     int day1,day2;
     TextView Output2;
     Button changeDate2;
     TextView Output3;
    static final int DATE_PICKER_ID1 = 111;
    static final int DATE_PICKER_ID2 = 222;
    @Override    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Output1 = (TextView) findViewById(R.id.Output);
        changeDate1 = (Button) findViewById(R.id.changeDate);
        Output2 = (TextView) findViewById(R.id.Output2);
        changeDate2 = (Button) findViewById(R.id.changeDate1);
        Output3 = (TextView) findViewById(R.id.output3);

        changeDate1.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                // On button click show datepicker dialog               
                    showDialog(DATE_PICKER_ID1);
            }
        });
        changeDate2.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                // On button click show datepicker dialog         
                    showDialog(DATE_PICKER_ID2);
            }
        });
    }
    @Override    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_PICKER_ID1:
                // open datepicker dialog.                
               // set date picker for year==0,month==0,day==0      
                 // add pickerListener listner to date picker      
               return new DatePickerDialog(this, pickerListener1, 0, 0, 0);
            case DATE_PICKER_ID2:
                // open datepicker dialog.              
                // set date picker for year==0,month==0,day==0      
                // add pickerListener listner to date picker     
            return new DatePickerDialog(this, pickerListener2, 0, 0, 0);
        }
        return null;
    }
        /*  BELOW IS THE FIRST DATEPICKEDIALOG LISTER FOR TAKING DIFFERET DATE    */
    private DatePickerDialog.OnDateSetListener pickerListener1 = new 
                                              DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.      
  @Override      
          public void onDateSet(DatePicker view, int selectedYear,
                              int selectedMonth, int selectedDay) {

            year1  = selectedYear;
            month1 = selectedMonth;
            day1   = selectedDay;

            // Show selected date           
                  Output1.setText(new StringBuilder().append(month1 + 1)
                    .append("-").append(day1).append("-").append(year1)
                    .append(" "));

        }

    };

    /* BELOW IS THE SECOND DATEPICKEDIALOG LISTER FOR TAKING DIFFERET DATE     */  
  private DatePickerDialog.OnDateSetListener pickerListener2 = new
                                                 DatePickerDialog.OnDateSetListener() {

        // when dialog box is closed, below method will be called.        
    @Override       
       public void onDateSet(DatePicker view, int selectedYear,
                              int selectedMonth, int selectedDay) {

            year2  = selectedYear;
            month2 = selectedMonth;
            day2   = selectedDay;

            // Show selected date          
                Output2.setText(new StringBuilder().append(month2 + 1)
                    .append("-").append(day2).append("-").append(year2)
                    .append(" "));
        }
    };
        // COUNT DAY DIFFERENCE    // WE ASSUME DEFAULT MONTH DAYS 30  
  public void showDiff(View view){
        int Days = 0;
        if(month2 == month1){
            if(day2>day1){
                Days = day2 - day1;
            }
        }
        else if(month2>month1){
            if(day2>day1){
                int m = month2-month1;
                Days = m*30 + (day2 - day1);
            }
        }
        else          
        Toast.makeText(this,"Invalid Out Date",Toast.LENGTH_LONG).show();
        Output3.setText(String.valueOf(Days) + " Days");
    }
}