GVKun编程网logo

java-Android NumberPicker NullPointer为什么?(java null pointer exception)

15

在本文中,我们将给您介绍关于java-AndroidNumberPickerNullPointer为什么?的详细内容,并且为您解答javanullpointerexception的相关问题,此外,我们

在本文中,我们将给您介绍关于java-Android NumberPicker NullPointer为什么?的详细内容,并且为您解答java null pointer exception的相关问题,此外,我们还将为您提供关于Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用、Android Number Picker获得textview的价值、Android NumberPickerDialog、Android NumberPicker小部件,如何通过软键盘输入值?的知识。

本文目录一览:

java-Android NumberPicker NullPointer为什么?(java null pointer exception)

java-Android NumberPicker NullPointer为什么?(java null pointer exception)

我试图实现一个numberPicker以选择分钟值.

但是我在这一行收到一个NullPointer异常:

minutesPicker =(NumberPicker)findViewById(R.id.minuten_picker);

以下代码:

public class MainActivity extends Activity {


NumberPicker minutePicker;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Auswahl Minuten zum starten / Stoppen aller
    minutePicker = new NumberPicker(MainActivity.this);
    minutePicker = (NumberPicker) findViewById(R.id.minuten_picker);
    minutePicker.setMaxValue(30);


    minutePicker.setonValueChangedListener(new NumberPicker.OnValuechangelistener() {
        @Override
        public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            abschaltzeit = minutePicker.getValue();
        }
    });

    minutePicker.setValue(0);
    minutePicker.setWrapSelectorWheel(false);

}
}

XML:

<NumberPicker
    android:id="@+id/minuten_picker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_row="6"
    android:layout_column="0"
    android:paddingLeft="20dp" />

日志:

09-25 11:00:09.749  10687-10687/de.carsten.awesome.app E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: de.carsten.awesome.app, PID: 10687
    java.lang.RuntimeException: Unable to start activity ComponentInfo{de.carsten.awesome.app/de.carsten.awesome.app.MainActivity}: java.lang.NullPointerException
            at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2184)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)
     Caused by: java.lang.NullPointerException
            at de.carsten.awesome.app.MainActivity.onCreate(MainActivity.java:83)
            at android.app.Activity.performCreate(Activity.java:5231)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
            at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2148)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233)
            at android.app.ActivityThread.access$800(ActivityThread.java:135)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
            at dalvik.system.NativeStart.main(Native Method)

解决方法:

minutePicker = new NumberPicker(MainActivity.this);
minutePicker = (NumberPicker) findViewById(R.id.minuten_picker);

您正在以编程方式创建NumberPicker,然后用findViewById()返回的值覆盖引用.如果您的activity_main布局不包含minutesn_picker,则返回null.

>仅选择另一个:以编程方式创建它,或者从您夸大的视图层次结构中找到它.
>如果您选择以编程方式new NumberPicker(),请记住将其添加到活动视图层次结构中的某些布局,例如与setContentView()
>如果选择充气方式,请确保在XML布局文件中具有视图.

我猜您正在看到的NPE实际上在以下行中,您正在尝试在minutePicker上调用一个方法,该方法为null.

Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

Android  CalendarView,DatePicker,TimePicker,以及NumberPicker的使用

简单复习下基础UI组件,做个简单的总结,Android的这些组件封装的特别好,基本套上就能使用,当然,这个减轻了开发者的负担!不过如果想要深入研究,这里面还是有很大的空间值得深度分析!简单的几个例子!仅供参考:

不多说,先上效果图:

CalendarView

ChooseView

NumberPicker

CalendarView代码区 :

main.xml代码区:CalendarView组件的使用加上一些简单的属性即可!

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="选择您的生日:"/>
  <!-- 设置以星期二作为每周第一天
  设置该组件总共显示4个星期
  并对该组件的日期时间进行了定制 -->
  <CalendarView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:firstDayOfWeek="3"
    android:shownWeekCount="4"
    android:selectedWeekBackgroundColor="#aff"
    android:focusedMonthDateColor="#f00"
    android:weekSeparatorLineColor="#ff0"
    android:unfocusedMonthDateColor="#f9f"
    android:id="@+id/calendarView" />
</LinearLayout>

Activity区代码:

public class MainActivity extends Activity
{
  CalendarView cv;
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    cv = (CalendarView)findViewById(R.id.calendarView);
    // 为CalendarView组件的日期改变事件添加事件监听器
    cv.setonDatechangelistener(new OnDatechangelistener()
    {
      @Override
      public void onSelectedDayChange(CalendarView view,int year,int month,int dayOfMonth)
      {
        // 使用Toast显示用户选择的日期
        Toast.makeText(MainActivity.this,"你生日是" + year + "年" + month + "月"
                + dayOfMonth + "日",Toast.LENGTH_SHORT).show();
      }
    });
  }
}

DatePicker,结合Calerdar的使用,可以供用户选择日期时使用:

代码区:

main.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="match_parent">
  <TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="选择购买本书的具体时间"/>
  <!-- 定义一个DatePicker组件 -->
  <DatePicker android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="200dp"
    android:layout_gravity="center_horizontal"
    android:startYear="2000"
    android:endYear="2016"
    android:calendarViewShown="true"
    android:spinneRSShown="true"/>
  <!-- 定义一个TimePicker组件 -->
  <TimePicker android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="100dp"
    android:layout_gravity="center_horizontal"/>
  <!-- 显示用户输入日期、时间的控件 -->
  <EditText android:id="@+id/show"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:editable="false"
    android:cursorVisible="false"/>
</LinearLayout>

Activity代码:

public class MainActivity extends Activity
{
  // 定义5个记录当前时间的变量
  private int year;
  private int month;
  private int day;
  private int hour;
  private int minute;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    DatePicker datePicker = (DatePicker)
        findViewById(R.id.datePicker);
    TimePicker timePicker = (TimePicker)
        findViewById(R.id.timePicker);
    // 获取当前的年、月、日、小时、分钟
    Calendar c = Calendar.getInstance();
    year = c.get(Calendar.YEAR);
    month = c.get(Calendar.MONTH);
    day = c.get(Calendar.DAY_OF_MONTH);
    hour = c.get(Calendar.HOUR);
    minute = c.get(Calendar.MINUTE);
    // 初始化DatePicker组件,初始化时指定监听器
    datePicker.init(year,month,day,new OnDateChangedListener()
    {
      @Override
      public void onDateChanged(DatePicker arg0,int day)
      {
        MainActivity.this.year = year;
        MainActivity.this.month = month;
        MainActivity.this.day = day;
        // 显示当前日期、时间
        showDate(year,hour,minute);
      }
    });
    timePicker.setEnabled(true);
    // 为TimePicker指定监听器
    timePicker.setonTimeChangedListener(new OnTimeChangedListener()
    {
      @Override
      public void onTimeChanged(TimePicker view,int hourOfDay,int minute)
      {
        MainActivity.this.hour = hourOfDay;
        MainActivity.this.minute = minute;
        // 显示当前日期、时间
        showDate(year,minute);
      }
    });
  }
  // 定义在EditText中显示当前日期、时间的方法
  private void showDate(int year,int day,int hour,int minute)
  {
    EditText show = (EditText) findViewById(R.id.show);
    show.setText("您的购买日期为:" + year + "年"
        + (month + 1) + "月" + day + "日 "
        + hour + "时" + minute + "分");
  }
}

NumberPicker主要使用在给用户提供数字选择时使用。

main.xml代码:

<TableLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="wrap_content">
  <TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
      android:text="选择低价:"
      android:layout_width="120dp"
      android:layout_height="wrap_content" />
    <NumberPicker
      android:id="@+id/np1"
      android:layout_width="match_parent"
      android:layout_height="80dp"
      android:focusable="true"
      android:focusableInTouchMode="true" />
  </TableRow>
  <TableRow
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <TextView
      android:text="选择高价:"
      android:layout_width="120dp"
      android:layout_height="wrap_content" />
    <NumberPicker
      android:id="@+id/np2"
      android:layout_width="match_parent"
      android:layout_height="80dp"
      android:focusable="true"
      android:focusableInTouchMode="true" />
  </TableRow>
</TableLayout>

Activity代码:

public class MainActivity extends Activity
{
  NumberPicker np1,np2;
  // 定义最低价格、最高价格的初始值
  int minPrice = 25,maxPrice = 75;
  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    np1 = (NumberPicker) findViewById(R.id.np1);
    // 设置np1的最小值和最大值
    np1.setMinValue(10);
    np1.setMaxValue(50);
    // 设置np1的当前值
    np1.setValue(minPrice);
    np1.setonValueChangedListener(new OnValuechangelistener()
    {
      // 当NumberPicker的值发生改变时,将会激发该方法
      @Override
      public void onValueChange(NumberPicker picker,int oldVal,int newVal)
      {
        minPrice = newVal;
        showSelectedPrice();
      }
    });
    np2 = (NumberPicker) findViewById(R.id.np2);
    // 设置np2的最小值和最大值
    np2.setMinValue(60);
    np2.setMaxValue(100);
    // 设置np2的当前值
    np2.setValue(maxPrice);
    np2.setonValueChangedListener(new OnValuechangelistener()
    {
      // 当NumberPicker的值发生改变时,将会激发该方法
      @Override
      public void onValueChange(NumberPicker picker,int newVal)
      {
        maxPrice = newVal;
        showSelectedPrice();
      }
    });
  }
  private void showSelectedPrice()
  {
    Toast.makeText(this,"您选择最低价格为:" + minPrice
        + ",最高价格为:" + maxPrice,Toast.LENGTH_SHORT)
        .show();
  }
}

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Android Number Picker获得textview的价值

Android Number Picker获得textview的价值

我正在使用带有数字选择器的警报对话框,但是当我按下警报的“确定”按钮时,我不知道在活动中将te数字选择器值提供给textview的简单方法.

活动java代码:

public class SecondActivity extends Activity {

public void button2 (View v){

    View v1 = getLayoutInflater().inflate(R.layout.dialog1,null);

    NumberPicker picker = (NumberPicker) v1.findViewById(R.id.np1);
    picker.setMinValue(1);
    picker.setMaxValue(20);
    picker.setWrapSelectorWheel(false);
    //final int number = picker.getValue();

    AlertDialog.Builder builder =  new AlertDialog.Builder(this);
    builder.setView (v1);
    builder.setTitle("Cantidad");
    builder.setPositiveButton(android.R.string.ok,new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog,int which) {
            return;
        } });
    builder.setNegativeButton(android.R.string.cancel,int which) {
            return;
        } }); 

    AlertDialog dialog = builder.create();
    dialog.show();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

}

}

显示布局:

活动布局:

ottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="ale.demarco.ale005.SecondActivity$PlaceholderFragment" >

 ravity="right" />


最佳答案
使用picker.getValue()获取选择器的当前值.

选中“对话框”按钮后,使用选定的值更新“活动”中的TextView

 builder.setPositiveButton(android.R.string.ok,new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog,int which) {
        int pickedValue = picker.getValue();
        // set your TextView id instead of R.id.textView1
        TextView textView = (TextView)findViewById(R.id.textView1);
        textView.setText(Integer.toString(pickedValue));
        return;
    } });

您还可以添加侦听器来侦听这样的数字更改

picker.setonValueChangedListener(new NumberPicker.OnValuechangelistener() {
        @Override
        public void onValueChange(NumberPicker picker,int oldVal,int newVal) {
           // do your other stuff depends on the new value

        }
    });

Android NumberPickerDialog

Android NumberPickerDialog

参考1:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.0_r1/com/android/mms/ui/NumberPickerDialog.java?av=h 

参考2:http://blog.csdn.net/sun_star1chen/article/details/16330459# 

参考3:TimePickerDialog源码

遇到问题:

设置NumberPicker不可编辑

  mNumberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 

参考:http://blog.csdn.net/yanjiee/article/details/42237631 

弹出NumberPicker的同时,不弹出系统软键盘

 ((EditText) mNumberPicker.getChildAt(0)).setInputType(InputType.TYPE_NULL);

参考:http://www.xuebuyuan.com/408875.html 

android DatePickerDialog theme :

原文:http://blog.csdn.net/lckj686/article/details/19552793

android datepicker disable keyboard:弹出日期选择框的时候,不弹出软键盘

private void setDisabledTextViews(ViewGroup dp) {

        for (int x = 0, n = dp.getChildCount(); x < n; x++) {

                View v = dp.getChildAt(x);

                if (v instanceof EditText) {

                        //v.setEnabled(false);

                        ((EditText) v).setInputType(InputType.TYPE_NULL);

                } else if (v instanceof ViewGroup) {

                        setDisabledTextViews((ViewGroup)v);

                }

        }

}

setDisabledTextViews(mDatePicker);

setDisabledTextViews(mTimePicker);

参考:http://androiddiscuss.com/1-android-discuss/13392.html 

Android NumberPicker小部件,如何通过软键盘输入值?

Android NumberPicker小部件,如何通过软键盘输入值?

我无法让我的NumberPicker的编辑字段正常工作,我已经阅读了类似问题的几个有用的答案,但它们似乎都没有解决这个特定的问题.虽然增量和减量按钮可以正常工作,但如果我使用软键盘输入数字,我无法使用NumberPicker.getValue()方法检索该值.我已经尝试使用我自己的NumberPicker.OnValueChangedListener()但它不会被调用,除非我单击向上或向下按钮,而不是当我按下软键盘完成按钮时,如某些人所建议的那样.任何人都可以帮我吗?这是 Android的错误吗?

这是我的XML布局:

<LinearLayout 
android:orientation="horizontal" 
android:layout_width="wrap_content" android:layout_height="wrap_content">
    <TextView android:id="@+id/textView1" android:layout_weight="1"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:layout_height="wrap_content" android:text="@string/enter_nights_"
        android:layout_width="0dp" android:padding="10dip"
        android:textColor="@color/black"
        ></TextView>
    <NumberPicker
        android:id="@+id/numPick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

和我的Activity onCreate()中的初始化代码:

mNumNights = (NumberPicker) findViewById(R.id.numPick);
    mNumNights.setMinValue(1);
    mNumNights.setMaxValue(99);
    mNumNights.setValue(mNights);
    mNumNights.setonValueChangedListener(new NumberPicker.OnValuechangelistener() {
        @Override
        public void onValueChange(NumberPicker picker,int oldVal,int newVal) {
            // do something here
            Log.d(TAG,"Number of Nights change value.");
        }
    });

从Activity中退出时,我得到的值如下:

mNights = mNumNights.getValue();

我在Android NumberPicker documentation中没有看到任何其他方法.我确实看到post建议挂钩onEditorActionListener()来获取完成按钮,但是这并没有告诉我如何获取值!总而言之,我的问题是如何获取值以及为什么NumberPicker不会自动更新其值?

谢谢!

编辑:我偶然发现了这个与我的问题非常相似的SO question,那里的答案看起来很有帮助,虽然我希望有一个比那里更好的方法.

解决方法

要让活动选择编辑,您需要调用nNumNights.clearFocus();在调用nNumNights.getValue();之前.该调用将更新控件的值.

今天关于java-Android NumberPicker NullPointer为什么?java null pointer exception的讲解已经结束,谢谢您的阅读,如果想了解更多关于Android CalendarView,DatePicker,TimePicker,以及NumberPicker的使用、Android Number Picker获得textview的价值、Android NumberPickerDialog、Android NumberPicker小部件,如何通过软键盘输入值?的相关知识,请在本站搜索。

本文标签: