Thursday 26 May 2016

SFTP file upload android example


Uploading files from Android using SFTP.

Jars files Needed

1) commons-logging-1.2.jar
2) commons-vfs2-2.1.jar
3) jsch-0.1.53.jar

Make sure you call this in a background thread.


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.adroitapps.ttcl.utils;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

import java.io.File;

/**
 * Created by pratap.kesaboyina on 24-05-2016.
 */
public class SftpClass {


    public static void uploadFile(File file) {


        String host = "", username = "",
                password = "";


        String localFilePath = file.getAbsolutePath();

        String fileName = localFilePath.substring(localFilePath.lastIndexOf("/") + 1);

        String remoteFilePath = "/foldername/" + fileName;


        JSch jsch = new JSch();
        Session session = null;
        try {
            session = jsch.getSession(username, host, 22);
            session.setConfig("StrictHostKeyChecking", "no");
            session.setPassword(password);
            session.connect();

            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            sftpChannel.put(localFilePath, remoteFilePath);
            sftpChannel.exit();
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();
        } catch (SftpException e) {
            e.printStackTrace();

        }
    }
}



Reference from stackoverflowlink





Android DatePicker Example


Recently, i got a requirement to have multiple datepickers in a single form.
So i decided to create a customview for android datepicker


Here is the code for CustomView extended from EditText


1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package com.pratap.calendarview.views;


import android.app.DatePickerDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.widget.DatePicker;
import android.widget.EditText;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * Date picker widget.
 *
 * @author bgamard
 */
public class DatePickerView extends EditText implements DatePickerDialog.OnDateSetListener {

    private Date date;

    //  private Date previousSelectedDate;

    public DatePickerView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public DatePickerView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setAttributes();
    }

    public DatePickerView(Context context) {
        super(context);
        setAttributes();
    }

    private void setAttributes() {

        setHint("Select Date");
        setGravity(Gravity.LEFT | Gravity.CENTER);
        setFocusable(false);
        // setTextSize(18);
        //  setPadding(10, 10, 10, 10);

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Calendar calendar = Calendar.getInstance();
                if (date != null) {
                    calendar.setTime(date);
                }
                DatePickerDialog datePicker = new DatePickerDialog(
                        DatePickerView.this.getContext(), DatePickerView.this,
                        calendar.get(Calendar.YEAR),
                        calendar.get(Calendar.MONTH),
                        calendar.get(Calendar.DAY_OF_MONTH));
                datePicker.setCancelable(false);

                // datePicker.setCanceledOnTouchOutside(true);
                datePicker.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCEL", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        if (which == DialogInterface.BUTTON_NEGATIVE) {
                            dialog.dismiss();

                        }
                    }
                });


                datePicker.show();
            }
        });
    }

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {


        Date date = new GregorianCalendar(year, monthOfYear, dayOfMonth).getTime();

        setDate(date);
    }

    public void setDate(Date date) {
        if (date != null) {
            this.date = date;
            SimpleDateFormat newformat = new SimpleDateFormat("yyyy-MM-dd");
            String formattedDate = newformat.format(date);
            setText(formattedDate);
        } else {

            setText("");
        }
    }

    public Date getDate() {
        return date;
    }

    public Calendar getModifiedDate() {
        Calendar calendar = Calendar.getInstance();
        if (date != null) {
            calendar.setTime(date);
        }
        return calendar;
    }
}



Use it xml Layout like below


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:elevation="4dp"
        android:title="Add New Event"
        android:titleTextColor="#FFF"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <LinearLayout
        android:id="@+id/formLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar"
        android:layout_margin="16dp"
        android:layout_weight="1"
        android:orientation="vertical">

        <EditText
            android:id="@+id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:fontFamily="sans-serif"
            android:hint="Enter Title"
            android:textSize="18sp" />

        <com.pratap.calendarview.views.DatePickerView
            android:id="@+id/startDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="start Date"
            android:fontFamily="sans-serif"
            android:textSize="18sp" />


        <com.pratap.calendarview.views.DatePickerView
            android:id="@+id/endDate"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="end Date"
            android:fontFamily="sans-serif"
            android:textSize="18sp" />

    
    </LinearLayout>


    <Button
        android:id="@+id/btnSave"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/formLayout"
        android:backgroundTint="@color/colorPrimary"
        android:text="Save"
        android:textColor="#FFF" />

</LinearLayout>




Screenshots: