两个Intent Bundle活动App崩溃

时间:2013-12-31 09:21:18

标签: android android-intent

我有活动A,活动B.

从A到B我在创建期间在putExtra中发送data1 如果需要再次发送不同的更新包,则不幸的是关闭了活动。

公共类VehicleManagement扩展了Activity {

DBAdapter db;
private static final int ACTIVITY_EDIT=1;
private Button manVehbtnNewV,manVBtnSave,manVBtncancel,vehManReminder,ManVehBtnVehType;
private EditText manVehVNoEt;
private ArrayList<String> vehicleType = new ArrayList<String>();
String typeOfVehicle ,VehNo;


private RemindersDbAdapter mDbHelper;

private ListView vehReminderLV,listViewvehMan;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_manage_vehicles);


    ManVehBtnVehType=(Button)findViewById(R.id.ManVehBtnVehType);

    manVBtncancel=(Button)findViewById(R.id.manVBtncancel);
    manVehVNoEt=(EditText)findViewById(R.id.ManVehEtVehNum);
    manVBtncancel=(Button)findViewById(R.id.manVBtncancel);
    vehManReminder=(Button)findViewById(R.id. vehManReminder);
    vehReminderLV=(ListView)findViewById(R.id.vehReminderLV);
    manVehbtnNewV.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Intent intentReminder= new Intent(getApplicationContext(),VehicleManagement.class);

            startActivity(intentReminder);  }
    });

//

    vehManReminder.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            VehNo = manVehVNoEt.getText().toString();
            Toast.makeText(getApplicationContext(), VehNo, Toast.LENGTH_SHORT).show();
            Intent intentReminder = new Intent(getApplicationContext(), ReminderEditActivity.class);
            intentReminder.putExtra("ReminderVehNo",  manVehVNoEt.getText().toString());
            startActivity(intentReminder);
        }
    });

    mDbHelper = new RemindersDbAdapter(this);
    mDbHelper.open();

    vehReminderLV.setOnItemClickListener( new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View selectedView,  int position, long id) {
             Intent i = new Intent(getApplicationContext(), ReminderEditActivity.class);
                i.putExtra(RemindersDbAdapter.KEY_ROWID, id);
                startActivityForResult(i, ACTIVITY_EDIT); 
}
    });
    registerForContextMenu(vehReminderLV);


}



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    fillData(manVehVNoEt.getText().toString());
}   

接受活动:

公共类ReminderEditActivity扩展了Activity {

private static final int DATE_PICKER_DIALOG = 0;
private static final int TIME_PICKER_DIALOG = 1;
private static final String DATE_FORMAT = "yyyy-MM-dd"; 
private static final String TIME_FORMAT = "kk:mm";
public static final String DATE_TIME_FORMAT = "yyyy-MM-dd kk:mm:ss";
private EditText mTitleText;
private EditText mBodyText;
private Button mDateButton;
private Button mTimeButton;
private Button mConfirmButton;
private Long mRowId;
private RemindersDbAdapter mDbHelper;
private Calendar mCalendar;
private TextView mTitleVehNo;
Spinner spinnerReminder;
String VehNospinner,vehReminder;
List<String> lable;
DBAdapter db;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mDbHelper = new RemindersDbAdapter(this);

    setContentView(R.layout.reminder_edit);



    mCalendar = Calendar.getInstance(); 
    mTitleText = (EditText) findViewById(R.id.title);
    mBodyText = (EditText) findViewById(R.id.body);

    mDateButton = (Button) findViewById(R.id.reminder_date);
    mTimeButton = (Button) findViewById(R.id.reminder_time);

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

    String vehReminder= getIntent().getStringExtra("ReminderVehNo");
    mTitleText.setText(vehReminder);


    mRowId = savedInstanceState != null ? savedInstanceState.getLong(RemindersDbAdapter.KEY_ROWID) 
                                        : null;

    registerButtonListenersAndSetDefaultText();
}

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();

    }

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

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; 
}

私人TimePickerDialog showTimePicker(){

    TimePickerDialog timePicker = new TimePickerDialog(this, new TimePickerDialog.OnTimeSetListener() {

        @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; 
}

private void registerButtonListenersAndSetDefaultText() {

    mDateButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(DATE_PICKER_DIALOG);  
        }
    }); 


    mTimeButton.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            showDialog(TIME_PICKER_DIALOG); 
        }
    }); 

    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(); 
        }

    });

      updateDateButtonText(); 
      updateTimeButtonText();
}

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); 
        } 
    } else {
        // This is a new task - add defaults from preferences if set. 
        SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
        String defaultTitleKey = getString(R.string.pref_task_title_key); 
        String defaultTimeKey = getString(R.string.pref_default_time_from_now_key); 

        String defaultTitle = prefs.getString(defaultTitleKey, null);
        String defaultTime = prefs.getString(defaultTimeKey, null); 

        if(defaultTitle != null)
            mTitleText.setText(defaultTitle); 

        if(defaultTime != null)
            mCalendar.add(Calendar.MINUTE, Integer.parseInt(defaultTime));

    }

    updateDateButtonText(); 
    updateTimeButtonText(); 

}

private void updateTimeButtonText() {
    // Set the time button text based upon the value from the database
    SimpleDateFormat timeFormat = new SimpleDateFormat(TIME_FORMAT); 
    String timeForButton = timeFormat.format(mCalendar.getTime()); 
    mTimeButton.setText(timeForButton);
}

private void updateDateButtonText() {
    // Set the date button text based upon the value from the database 
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); 
    String dateForButton = dateFormat.format(mCalendar.getTime()); 
    mDateButton.setText(dateForButton);
}

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



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); 

}

}

1 个答案:

答案 0 :(得分:1)

使用SharedPreference。您可以保存并从任何活动中检索。

<强>初始化

SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", 0); // 0 - for private mode
Editor editor = pref.edit();

存储数据

editor.putBoolean("key_name", true); // Storing boolean - true/false
editor.putString("key_name", "string value"); // Storing string
editor.putInt("key_name", "int value"); // Storing integer
editor.putFloat("key_name", "float value"); // Storing float
editor.putLong("key_name", "long value"); // Storing long

editor.commit(); // commit changes

检索数据

// returns stored preference value
// If value is not present return second param value - In this case null
pref.getString("key_name", null); // getting String
pref.getInt("key_name", null); // getting Integer
pref.getFloat("key_name", null); // getting Float
pref.getLong("key_name", null); // getting Long
pref.getBoolean("key_name", null); // getting boolean

删除数据

editor.remove("name"); // will delete key name
editor.remove("email"); // will delete key email
editor.commit(); // commit changes

清算存储空间

editor.clear();
editor.commit(); // commit changes