user1343631
user1343631

Reputation:

Android: How to get values from date and time picker

I am building a app in which i am trying to ask user to select the time, so i used datePicker and timePicker and a button set. So when he click on set button a dialog box comes and say like you have selected x date and x time or in any way a message should appear on screen like user have selected this time. So i built the code but as my app comes to that activity it always got forcefully stopped.There is no problem with the xml file relating to display the data because when i comment java lines of fetching the values from datePicker and timePicker, app works absolutely fine. Still i am posting both files code for easy to understanding. also posting the log cat exception. I have removed all unnecessary code like import and packages and extra button etc To make it quick readable.

This is the code of .xml file

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:weightSum="10"
android:id="@+id/commonlayout" android:background="#FFFFFF">

<LinearLayout android:id="@+id/llheader"
    android:layout_width="fill_parent" android:layout_height="20dp"
     android:layout_weight="1"
     android:background="@drawable/bg">

    <RelativeLayout android:id="@+id/relativeLayout1"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:layout_gravity="center"> <!--header-->
        <TextView
            android:id="@+id/txt_header"
            android:layout_width="wrap_content"          
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"/>            
        </RelativeLayout>           
</LinearLayout>
 <ScrollView 
    android:id="@+id/scrollView1"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="wrap_content"
    android:id="@+id/linearLayout1" android:orientation="vertical"
    android:layout_height="wrap_content" 
<DatePicker android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
  android:id="@+id/datePicker"></DatePicker>
<TimePicker android:id="@+id/timePicker"
    android:layout_width="wrap_content"   
  android:layout_height="wrap_content</TimePicker>
<TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content"
    android:layout_width="match_parent" android:gravity="center">

    <Button android:id="@+id/btnSetDateTime"
        android:layout_height="wrap_content" android:text="Set"
        android:layout_width="wrap_content"/>
     <Button 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:text="Next"                       
        android:id="@+id/btnNext1" />   
  </TableRow>
 </LinearLayout>
 </ScrollView>    
<LinearLayout android:id="@+id/lldata"
    android:layout_weight="8" android:layout_width="fill_parent"
    android:layout_height="0dp" android:background="#FFFFFF">           
</LinearLayout>

<LinearLayout android:id="@+id/llfooter"
    android:layout_width="fill_parent"
    android:orientation="horizontal" android:layout_height="20dp"
    android:visibility="visible" 
    android:layout_margin="0dp">     
</LinearLayout>

This is the code of TimeDate.java:

public class TimeDate extends Activity
{


Button  btnNext;
private TextView dateText;
 public void onCreate(Bundle savedInstanceState)
 {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.time_date);
        btnNext=(Button)this.findViewById(R.id.btnNext1);           
        btnNext.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) 
            {

                    Intent myintent = new  Intent(TimeDate.this, Next.class);
                    startActivity(myintent);
                    finish();
                    }
        });
        ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null);

        Button  btnSet = (Button) DTPicker.findViewById(R.id.btnSetDateTime);
        final   DatePicker dp = (DatePicker) DTPicker.findViewById(R.id.datePicker);
        final   TimePicker tp = (TimePicker) DTPicker.findViewById(R.id.timePicker);

        btnSet.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute();}});

       AlertDialog alert = new AlertDialog.Builder(TimeDate.this).create();
        alert.setTitle("Reminder");
        alert.setView(DTPicker);
        alert.show();

 }       
}

This is the logcat exception:

04-27 11:48:24.830: D/AndroidRuntime(812): Shutting down VM
04-27 11:48:24.830: W/dalvikvm(812): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-27 11:48:24.851: E/AndroidRuntime(812): FATAL EXCEPTION: main
04-27 11:48:24.851: E/AndroidRuntime(812): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ogtpl.android/com.ogtpl.android.TimeDate}: java.lang.ClassCastException: android.widget.LinearLayout

Upvotes: 9

Views: 23627

Answers (5)

amirreza arampour
amirreza arampour

Reputation: 77

Create Calendar instance , Then assign values from DatePicker and TimePicker to calendar

calendar.timeInMillis will return exact time mil

val calendar = Calendar.getInstance()
calendar.set(datePicker.year, datePicker.month+1, datePicker.dayOfMonth,
          timePicker.hour, timePicker.minute, 0) 
val millis = calendar.timeInMillis 

Upvotes: 0

Vikas Gupta
Vikas Gupta

Reputation: 1530

Don't do anything extra, Your code is just prefect. Just remove the code of ScrollLayout or its attribute wherever you are using that. Lemme write the updated code for you from ScrollLayout

 final   DatePicker dp = (DatePicker) findViewById(R.id.datePicker);
        final   TimePicker tp = (TimePicker) findViewById(R.id.timePicker);
        btnSet.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute();

                Toast.makeText(TimeDate.this, "User selected " + strDateTime + "Time", Toast.LENGTH_LONG).show(); //Generate a toast only if you want 
                finish();   // If you want to continue on that TimeDateActivity
                 // If you want to go to new activity that code you can also write here
            }});

Upvotes: 13

dira
dira

Reputation: 30594

try following code....

time_date.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"
    android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="10" android:id="@+id/commonlayout"
    android:background="#FFFFFF">

    <LinearLayout android:id="@+id/llheader" android:layout_width="fill_parent" android:layout_height="20dp"
        android:layout_weight="1">
        <RelativeLayout android:id="@+id/relativeLayout1" android:layout_width="fill_parent"
            android:layout_height="fill_parent" android:layout_gravity="center"> <!--header -->
            <TextView android:id="@+id/txt_header" android:layout_width="wrap_content" android:layout_centerHorizontal="true"
                android:layout_centerVertical="true" android:layout_height="wrap_content" />
        </RelativeLayout>
    </LinearLayout>

    <ScrollView android:id="@+id/scrollView1" android:layout_width="wrap_content" android:layout_height="wrap_content"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <LinearLayout android:layout_width="wrap_content" android:id="@+id/linearLayout1" android:orientation="vertical"
            android:layout_height="wrap_content">

            <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/datePicker" />
            <TimePicker android:id="@+id/timePicker" android:layout_width="wrap_content" android:layout_height="wrap_content" />

            <TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content" android:layout_width="match_parent"
                android:gravity="center">

                <Button android:id="@+id/btnSetDateTime" android:layout_height="wrap_content" android:text="Set"
                    android:layout_width="wrap_content" />
                <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Next"
                    android:id="@+id/btnNext1" />
            </TableRow>

        </LinearLayout>
    </ScrollView>

    <LinearLayout android:id="@+id/lldata" android:layout_weight="8" android:layout_width="fill_parent"
        android:layout_height="0dp" android:background="#FFFFFF">
    </LinearLayout>

    <LinearLayout android:id="@+id/llfooter" android:layout_width="fill_parent" android:orientation="horizontal"
        android:layout_height="20dp" android:visibility="visible" android:layout_margin="0dp">
    </LinearLayout>

</LinearLayout>

DateTimeActivity.java

public class DateTimeActivity extends Activity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.time_date);
        setTitle("Reminder");

        Button btnNext = (Button) findViewById(R.id.btnNext1);           
        btnNext.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent myintent = new  Intent(DateTimeActivity.this, Next.class);
                startActivity(myintent);
                finish();
            }
        });

        Button  btnSet = (Button) findViewById(R.id.btnSetDateTime);
        final   DatePicker dp = (DatePicker) findViewById(R.id.datePicker);
        final   TimePicker tp = (TimePicker) findViewById(R.id.timePicker);

        btnSet.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                String strDateTime = dp.getYear() + "-" + (dp.getMonth() + 1) + "-" + dp.getDayOfMonth() + " "+ tp.getCurrentHour() + ":" + tp.getCurrentMinute();

                Toast.makeText(DateTimeActivity.this, "User has selected " + strDateTime, Toast.LENGTH_LONG).show();

                finish();// move to previous activity
            }});

    }       

}

Upvotes: 0

Shankar Agarwal
Shankar Agarwal

Reputation: 34765

ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null);
Button  btnSet = (Button) DTPicker.findViewById(R.id.btnSetDateTime);
final   DatePicker dp = (DatePicker) DTPicker.findViewById(R.id.datePicker);
final   TimePicker tp = (TimePicker) DTPicker.findViewById(R.id.timePicker);

replace the above line with below

ScrollView DTPicker = (ScrollView)findViewById(R.id.scrollView1);
Button  btnSet = (Button)findViewById(R.id.btnSetDateTime);
final   DatePicker dp = (DatePicker)findViewById(R.id.datePicker);
final   TimePicker tp = (TimePicker)findViewById(R.id.timePicker);

Upvotes: 1

Rajesh
Rajesh

Reputation: 15774

Your problem seems to be in this line:

ScrollView DTPicker = (ScrollView) View.inflate(TimeDate.this,R.layout.time_date, null);

You are inflating an XML containing LinearLayout as the root node, however you are type-casting it to ScrollView causing the ClassCastException.

Upvotes: 0

Related Questions