2013-09-19 2 views
0

Я пытаюсь создать простое приложение, которое открывает диалог выбора времени, когда вы нажимаете кнопку «Проверить», и как только вы установите время и нажмите «ОК», он проверяет системное время и выводит, является ли это правильным. Однако в строке 21 MainActivity.java я получил исключение с нулевым указателем. В настоящий момент код просто настроен, чтобы вызвать диалог после того, как «Проверка» нажата.Исключение Null pointer с помощью Time Pickers

MainActivity.java

package com.example.timechecker; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.support.v4.app.FragmentManager; 
import android.view.View; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public FragmentManager getSupportFragmentManager() { 
    return null; 
} 
public void checkTime(View view) { 
    DialogFragment newFragment = new TimePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "timePicker"); 

} 

} 

TimePickerFragment.java

package com.example.timechecker; 
import java.util.Calendar; 

import android.app.Dialog; 
import android.app.TimePickerDialog; 
import android.os.Bundle; 
import android.support.v4.app.DialogFragment; 
import android.text.format.DateFormat; 
import android.widget.TimePicker; 

public class TimePickerFragment extends DialogFragment 
         implements TimePickerDialog.OnTimeSetListener { 

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    // Use the current time as the default values for the picker 
    final Calendar c = Calendar.getInstance(); 
    int hour = c.get(Calendar.HOUR_OF_DAY); 
    int minute = c.get(Calendar.MINUTE); 

    // Create a new instance of TimePickerDialog and return it 
    return new TimePickerDialog(getActivity(), this, hour, minute, 
      DateFormat.is24HourFormat(getActivity())); 
} 

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    // Do something with the time chosen by the user 
} 
} 

manifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.timechecker" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.example.timechecker.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> 
     <activity 
     android:name="com.example.timechecker.TimePickerFragment" 
     android:label="@string/app_name" > 
    </activity> 
</application> 

</manifest> 

Activity_Main.xml

<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" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/whatTime" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="What time is it?" 
    android:textAppearance="?android:attr/textAppearanceLarge" /> 

<Button 
    android:id="@+id/check" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:onClick="checkTime" 
    android:text="Check" /> 

</LinearLayout> 
+1

указать строку в коде, пожалуйста, как вы своего рода техника его подводит даже упоминать класс, в котором происходит NullPointer –

+0

Упоминается, что это в MainActivity.java –

+0

жаль, должно быть, пропустил :) так его точно линия, которую я догадывался. Проверьте мой ответ ниже. –

ответ

0

А я вижу, что здесь происходит.

public FragmentManager getSupportFragmentManager() { 
    return null; 
} 
public void checkTime(View view) { 
    DialogFragment newFragment = new TimePickerFragment(); 
    newFragment.show(getSupportFragmentManager(), "timePicker"); 

} 

переопределение getSupportFragmentManager возвращать нуль, и после этого вы вызываете метод, чтобы показать диалоговое окно, выглядит, как вы создали NullPointer нарочно? = D

+0

Казалось бы, это так ха-ха, хотя я не совсем уверен, что я должен вернуть? –

+0

use getFragmentManager(), Activity does not support getSupportFragmentManager() –

+0

Измените свою активность как FragmentActivity. Удалите реализацию getSupportFragmentManager(). Готово. – dymmeh

Смежные вопросы