2014-07-16 8 views
-1

Je suis assez nouveau à android, s'il vous plaît ne me dérange pas pour cette question idiote mais s'il vous plaît répondez si vous savez ... !! Alors que je commençais une nouvelle activité en utilisant l'intention, mais mon application malheureusement arrêté lorsque j'ai commencé une nouvelle activité.Error était java.lang.NullPointerException. J'ai perdu beaucoup de temps et je n'arrive pas à comprendre où est le problème.java.lang.nullpointerexception erreur

Ceci est la première activité:

package com.people.rock; 

import com.android.taskreminder.R; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.view.ContextMenu; 
import android.view.ContextMenu.ContextMenuInfo; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.AdapterView.AdapterContextMenuInfo; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class ReminderListActivity extends ListActivity { 

    private static final int ACTIVITY_CREATE=0; 
    //private static final int ACTIVITY_EDIT=1; 

    private RemindersDbAdapter mDbHelper; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.reminder_list); 

     mDbHelper = new RemindersDbAdapter(this); 
     mDbHelper.open(); 
     fillData(); 
     registerForContextMenu(getListView()); 

     } 
    @SuppressWarnings("deprecation") 
    private void fillData() { 
     Cursor remindersCursor = mDbHelper.fetchAllReminders(); 
     startManagingCursor(remindersCursor); 
     // Create an array to specify the fields we want (only the TITLE) 
     String[] from = new String[]{RemindersDbAdapter.KEY_TITLE}; 
     // and an array of the fields we want to bind in the view 
     int[] to = new int[]{R.id.text1}; 
     // Now create a simple cursor adapter and set it to display 
     SimpleCursorAdapter reminders = 
     new SimpleCursorAdapter(this, R.layout.reminder_row, remindersCursor, from, to); 
     setListAdapter(reminders); 
     } 



    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Intent i = new Intent(this, ReminderEditActivity.class); 
    i.putExtra("RowId", id); 
    startActivity(i); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo 
    menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    MenuInflater mi = getMenuInflater(); 
    mi.inflate(R.menu.list_menu_item_longpress, menu); 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 

     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.reminder_list, menu); 
     MenuInflater mi = getMenuInflater(); 
     mi.inflate(R.menu.list_menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.menu_insert: 
      createReminder(); 
      return true; 
    } 
    return super.onMenuItemSelected(featureId, item); 
    } 

    public boolean onContextItemSelected(MenuItem item) { 
     switch(item.getItemId()) { 
     case R.id.menu_delete: 
      AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
      mDbHelper.deleteReminder(info.id); 
      fillData(); 
      return true; 
    } 
    return super.onContextItemSelected(item); 
    } 


    private void createReminder() { 
    Intent i = new Intent(this, ReminderEditActivity.class); 
    startActivityForResult(i, ACTIVITY_CREATE); 
    } 


    protected void onActivityResult(int requestCode, int resultCode, Intent intent) 
    { 
    super.onActivityResult(requestCode, resultCode, intent); 
    fillData(); 
    } 



} 

C'est la nouvelle activité que j'ai appelé en utilisant l'intention.

package com.people.rock; 

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

    import com.android.taskreminder.R; 

    import android.annotation.SuppressLint; 
    import android.app.Activity; 
    import android.app.DatePickerDialog; 
    import android.app.Dialog; 
    import android.app.TimePickerDialog; 
    import android.database.Cursor; 
    import android.os.Bundle; 
    import android.util.Log; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.DatePicker; 
    import android.widget.EditText; 
    import android.widget.TimePicker; 
    import android.widget.Toast; 

    @SuppressLint("SimpleDateFormat") public class ReminderEditActivity extends Activity { 

     // all variables are declared before content view and are initiated after it. 
     private Button mTimeButton; 
     private Button mDateButton; 
     private static final String DATE_FORMAT = "yyyy-MM-dd"; 
     private static final String TIME_FORMAT = "hour-minute"; 
     public static final String DATE_TIME_FORMAT = "yyyy-MM-dd kk:mm:ss"; 
     private static final int DATE_PICKER_DIALOG = 0; 
     private static final int TIME_PICKER_DIALOG = 1; 
     Calendar mCalendar; 
     private EditText mTitleText; 
     private Button mConfirmButton; 
     private EditText mBodyText; 
     private RemindersDbAdapter mDbHelper; 
     private Long mRowId; 

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

     registerButtonListnerAndSetDefaultText(); 

     //variable initiation 
      mDbHelper = new RemindersDbAdapter(this); 
      mDateButton=(Button) findViewById(R.id.reminder_date); 
      mTimeButton=(Button) findViewById(R.id.reminder_time); 

     mCalendar = Calendar.getInstance(); 

     mConfirmButton = (Button) findViewById(R.id.confirm); 

     mTitleText = (EditText) findViewById(R.id.title); 

     mBodyText = (EditText) findViewById(R.id.body); 

     //to check whether any previous state exist which might be closed by killing of activity 
     mRowId = savedInstanceState != null 
       ? savedInstanceState.getLong(RemindersDbAdapter.KEY_ROWID) 
       : null; 

     } 

     //to set id if we got it from intent declared in reminder_list activity 
     private void setRowIdFromIntent() { 
      if (mRowId == null) { 
      Bundle extras = getIntent().getExtras(); 
      mRowId = extras != null 
      ? extras.getLong(RemindersDbAdapter.KEY_ROWID) 
      : null; 
      } 
      } 

      @Override 
      protected void onPause() { 
      super.onPause(); 
      mDbHelper.close(); 
      } 

      @Override 
      protected void onResume() { 
      super.onResume(); 
      mDbHelper.open(); 
      setRowIdFromIntent(); 
      populateFields(); 
      } 

      //to fill the form of existing id which was killed by android 
      @SuppressWarnings("deprecation") 
      private void populateFields() { 
      if (mRowId != null) { 
      Cursor reminder = mDbHelper.fetchReminder(mRowId); 
      startManagingCursor(reminder); 
      mTitleText.setText(reminder.getString(
      reminder.getColumnIndexOrThrow(RemindersDbAdapter.KEY_TITLE))); 
      mBodyText.setText(reminder.getString(
      reminder.getColumnIndexOrThrow(RemindersDbAdapter.KEY_BODY))); 
      SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); 
      Date date = null; 
      try { 
      String dateString = reminder.getString(
      reminder.getColumnIndexOrThrow(RemindersDbAdapter.KEY_DATE_TIME)); 
      date = dateTimeFormat.parse(dateString); 
      mCalendar.setTime(date); 
      } catch (ParseException e) { 
       Log.e("ReminderEditActivity", e.getMessage(), e); 
      } 
      } 
      updateDateButtonText(); 
      updateTimeButtonText(); 
      } 

      @Override 
      protected void onSaveInstanceState(Bundle outState) { 
      super.onSaveInstanceState(outState); 
      outState.putLong(RemindersDbAdapter.KEY_ROWID, mRowId); 
      } 

       private void registerButtonListnerAndSetDefaultText(){ 
      mConfirmButton.setOnClickListener(new View.OnClickListener() { 
       public void onClick(View view) { 
       saveState(); 
       setResult(RESULT_OK); 
       Toast.makeText(ReminderEditActivity.this,getString(R.string.task_saved_message),Toast.LENGTH_SHORT).show(); 
       finish(); 
       } 
       }); 
      mDateButton.setOnClickListener(new View.OnClickListener() { 
        @SuppressWarnings("deprecation") 
        @Override   
       public void onClick(View v) { 
        showDialog(DATE_PICKER_DIALOG); 
       } 
       }); 
      mTimeButton.setOnClickListener(new View.OnClickListener() { 
       @SuppressWarnings("deprecation") 
       @Override 
       public void onClick(View v) { 
        showDialog(TIME_PICKER_DIALOG); 
       } 
      }); 
       updateDateButtonText(); 
       updateTimeButtonText(); 
     } 

     @SuppressWarnings("deprecation") 
     protected Dialog onCreateDialog(int id) { 
       switch(id) { 
      case DATE_PICKER_DIALOG: 
       return showDatePicker(); 
      case TIME_PICKER_DIALOG: 
       return showTimePicker(); 
     } 
     return super.onCreateDialog(id); 
     } 

     @SuppressLint("SimpleDateFormat") private DatePickerDialog showDatePicker() { 
     DatePickerDialog datePicker = new DatePickerDialog(ReminderEditActivity.this ,new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 

       mCalendar.set(Calendar.YEAR, year); 
       mCalendar.set(Calendar.MONTH, monthOfYear); 
       mCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
         updateDateButtonText(); 
     } 
     }, mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH)); 
       return datePicker; 
     } 
     private void updateDateButtonText() { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); 
     String dateForButton = dateFormat.format(mCalendar.getTime()); 
     mDateButton.setText(dateForButton); 
     } 

     private TimePickerDialog showTimePicker() { 
      TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() { 
      @SuppressLint("SimpleDateFormat") @Override 
      public void onTimeSet(TimePicker view, int hourOfDay, int minute){ 
      mCalendar.set(Calendar.HOUR_OF_DAY, hourOfDay); 
      mCalendar.set(Calendar.MINUTE, minute); 
      updateTimeButtonText(); 
      } 
      }, mCalendar.get(Calendar.HOUR_OF_DAY), 
      mCalendar.get(Calendar.MINUTE), true); 
      return timePicker; 
      } 
     @SuppressLint("SimpleDateFormat") private void updateTimeButtonText() { 
      SimpleDateFormat TimeFormat = new SimpleDateFormat(TIME_FORMAT); 
      String timeForButton = TimeFormat.format(mCalendar.getTime()); 
      mDateButton.setText(timeForButton); 
      } 

     private void saveState() { 
      String title = mTitleText.getText().toString(); 
      String body = mBodyText.getText().toString(); 
      SimpleDateFormat dateTimeFormat = new SimpleDateFormat(DATE_TIME_FORMAT); 
      String reminderDateTime = dateTimeFormat.format(mCalendar.getTime()); 
      if (mRowId == null) { 
       long id = mDbHelper.createReminder(title, body, reminderDateTime); 

       if (id > 0) { 
       mRowId = id; 
       } 
       } else { 
       mDbHelper 
       .updateReminder(mRowId, title, body, reminderDateTime); 
       } 
      new ReminderManager(this).setReminder(mRowId, mCalendar); 
       } 
        } 

C'est l'erreur que je reçois

07-16 08:04:30.620: D/dalvikvm(945): GC_FOR_ALLOC freed 44K, 4% free 3054K/3168K, paused 35ms, total 38ms 
07-16 08:04:30.630: I/dalvikvm-heap(945): Grow heap (frag case) to 3.520MB for 500416-byte allocation 
07-16 08:04:30.670: D/dalvikvm(945): GC_FOR_ALLOC freed 2K, 4% free 3540K/3660K, paused 33ms, total 33ms 
07-16 08:04:31.570: I/Choreographer(945): Skipped 38 frames! The application may be doing too much work on its main thread. 
07-16 08:04:31.800: D/gralloc_goldfish(945): Emulator without GPU emulation detected. 
07-16 08:11:32.195: D/dalvikvm(945): GC_FOR_ALLOC freed 56K, 4% free 3717K/3840K, paused 108ms, total 109ms 
07-16 08:11:32.195: I/dalvikvm-heap(945): Grow heap (frag case) to 4.142MB for 474384-byte allocation 
07-16 08:11:32.425: D/dalvikvm(945): GC_FOR_ALLOC freed 13K, 4% free 4167K/4304K, paused 53ms, total 53ms 
07-16 08:11:32.685: D/AndroidRuntime(945): Shutting down VM 
07-16 08:11:32.685: W/dalvikvm(945): threadid=1: thread exiting with uncaught exception (group=0xb3a62ba8) 
07-16 08:11:32.715: E/AndroidRuntime(945): FATAL EXCEPTION: main 
07-16 08:11:32.715: E/AndroidRuntime(945): Process: com.android.taskreminder, PID: 945 
07-16 08:11:32.715: E/AndroidRuntime(945): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.taskreminder/com.people.rock.ReminderEditActivity}: java.lang.NullPointerException 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread.access$800(ActivityThread.java:135) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.os.Handler.dispatchMessage(Handler.java:102) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.os.Looper.loop(Looper.java:136) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread.main(ActivityThread.java:5017) 
07-16 08:11:32.715: E/AndroidRuntime(945): at java.lang.reflect.Method.invokeNative(Native Method) 
07-16 08:11:32.715: E/AndroidRuntime(945): at java.lang.reflect.Method.invoke(Method.java:515) 
07-16 08:11:32.715: E/AndroidRuntime(945): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
07-16 08:11:32.715: E/AndroidRuntime(945): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
07-16 08:11:32.715: E/AndroidRuntime(945): at dalvik.system.NativeStart.main(Native Method) 
07-16 08:11:32.715: E/AndroidRuntime(945): Caused by: java.lang.NullPointerException 
07-16 08:11:32.715: E/AndroidRuntime(945): at com.people.rock.ReminderEditActivity.registerButtonListnerAndSetDefaultText(ReminderEditActivity.java:121) 
07-16 08:11:32.715: E/AndroidRuntime(945): at com.people.rock.ReminderEditActivity.onCreate(ReminderEditActivity.java:47) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.Activity.performCreate(Activity.java:5231) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
07-16 08:11:32.715: E/AndroidRuntime(945): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
07-16 08:11:32.715: E/AndroidRuntime(945): ... 11 more 
07-16 08:11:36.505: I/Process(945): Sending signal. PID: 945 SIG: 9 

Merci à l'avance

+0

supprimer 'setContentView (R.layout.reminder_list);' –

+0

post 'reminder_edit.xml' – Raghunandan

Répondre

1

Vous utilisez boutons listener (mConfirmButton,mDateButton,mTimeButton) dans registerButtonListnerAndSetDefaultText() fonction befo re initialisation.

Alors, appelez registerButtonListnerAndSetDefaultText() après boutons comme initialisation

 mDbHelper = new RemindersDbAdapter(this); 
    mDateButton=(Button) findViewById(R.id.reminder_date); 
    mTimeButton=(Button) findViewById(R.id.reminder_time); 
    mCalendar = Calendar.getInstance(); 
    mConfirmButton = (Button) findViewById(R.id.confirm); 
    mTitleText = (EditText) findViewById(R.id.title); 
    mBodyText = (EditText) findViewById(R.id.body); 

    registerButtonListnerAndSetDefaultText(); // use here 
0

Votre échec est que vous appelez à registerButtonListnerAndSetDefaultText() avant de trouver le bouton mConfirmButton par id;)

0

Vous appelez registerButtonListnerAndSetDefaultText(); avant d'initialiser mConfirmButton il donne NullPointerException.

Questions connexes