记事本中spinner虽能显示为数据库内保存的分类,但更改记事须再点一个分类才能保存,否则闪退?

数据

public class SQLBean {
	private String id; //主键自增id
	private String title; //日记标题
	private String context; //日记内容
	private String contextfl; //日记内容

	public String get_id() {//获取日记id
		return id;
	}
	public void set_id(String _id) {//设置日记id
		this.id = _id;
	}
	public String getTitle() {//获取日记标题
		return title;
	}
	public void setTitle(String title) {//设置日记标题
		this.title = title;
	}
	public String getContext() {//获取日记内容
		return context;
	}
}
	public void setContext(String context) {//设置日记内容
		this.context = context;
	}

	public String getFl() {//获取日记内容
		return contextfl;
	}
   public void setFl(String fl) {//设置日记内容
		this.contextfl = contextfl;
	}

 

AddACTIVITY.java里对spinner的代码,

<Spinner
    android:id="@+id/fl"
    android:layout_width="175dp"
    android:layout_height="85dp"
    android:background="#78ffffff"
    android:layout_marginLeft="0dp"
    android:scrollbarSize="150dp"
    android:spinnerMode="dropdown"
    android:theme="@style/itemSpinnerStyle"
    />

 

public class AddActivity extends Activity {

    private Button bt_back;
    private Button bt_save;
    private TextView tv_title,tv_notes_fl;
    private SQLiteDatabase db;//数据库操作类
    private DatabaseOperation dop;//自定义数据库
    private LineEditText et_Notes,et_Notesbt;
    
    String editModel = null;
    int item_Id;
    String title;
    String time;
    String context;
    String context2;
    
    private ImageButton ib_lk;

    private Spinner spinner;
    private ArrayAdapter<String> mAdapter ;
    private String [] mStringArray;
    String contextfl;
    boolean isAutoSelect = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);
        bt_back = (Button) findViewById(R.id.bt_back);
        bt_back.setOnClickListener(new ClickEvent());
        bt_save = (Button) findViewById(R.id.bt_save);
        bt_save.setOnClickListener(new ClickEvent());
        tv_title = (TextView) findViewById(R.id.tv_title);
        et_Notes = (LineEditText) findViewById(R.id.et_note);
        et_Notesbt = (LineEditText) findViewById(R.id.et_notebt);
       
       
        dop = new DatabaseOperation(this, db);
        intent = getIntent();
        editModel = intent.getStringExtra("editModel");
        item_Id = intent.getIntExtra("noteId", 0);
        spinner = (Spinner) findViewById(R.id.fl);
        final String[] mItems = {"工作", "会议", "社交", "财产", "身材"};
        ArrayAdapter<String> adapter1 = new                 
        ArrayAdapter<String(this,android.R.layout.simple_spinner_item, mItems);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter1);
        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, intposition,long id) 
   {
        // TODO Auto-generated method stub
        if(isAutoSelect){
            isAutoSelect = false;
         }else{
              String str=parent.getItemAtPosition(position).toString();//获取item的值。
              Toast.makeText(getApplicationContext(), "你选择的分类是:"
   +str,Toast.LENGTH_LONG).show();
              // to do something...
         }

         contextfl = (String) spinner.getSelectedItem();
                
    }

    @Override
   public void onNothingSelected(AdapterView<?> parent) {
                // TODO Auto-generated method stub
   }
        });
        loadData();
}
// 加载数据
    private void loadData() {
        // 如果是新增记事模式,则将editText清空
        if (editModel.equals("newAdd")) {
            et_Notes.setText("");
            et_Notesbt.setText("");
            spinner.setSelection(2,true);
        }
        // 如果编辑的是已存在的记事,则将数据库的保存的数据取出,并显示在EditText中
        else if (editModel.equals("update")) {
            tv_title.setText("编辑记事");
            dop.create_db();
            Cursor cursor = dop.query_db(item_Id);
            cursor.moveToFirst();

            // 取出数据库中相应的字段内容
            title = cursor.getString(cursor.getColumnIndex("title"));
            context = cursor.getString(cursor.getColumnIndex("context"));
            contextfl = cursor.getString(cursor.getColumnIndex("contextfl"));
            
            final String[] mItems = {"工作", "会议", "社交", "财产"};
            ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mItems);
            //spinner.setAdapter(adapter1);
            int position = adapter1.getPosition(contextfl);
            spinner.setSelection(position,true);
            
            et_Notesbt.append(title.substring(startIndex2, title.length()));
       
            et_Notes.append(context.substring(startIndex, context.length()));
            dop.close_db();
        }
    }

Mainactivity.java里显示

public class MainActivity extends Activity {
	private Button bt_add;// 添加按钮
	private SQLiteDatabase db;//数据库对象
	private DatabaseOperation dop;//自定义数据库类
	private MyGridView lv_notes;// 消息列表
	private TextView tv_note_id, tv_locktype, tv_lock,tv_note_fl;
	public AlarmManager am;// 消息管理者
	public EditText et_keyword;// 搜索框
	public MainAdapter adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv_note_fl = (TextView) findViewById(R.id.tv_note_fl);
		bt_add = (Button) findViewById(R.id.bt_add);
		bt_add.setOnClickListener(new ClickEvent());
		et_keyword = (EditText) findViewById(R.id.et_keyword);
		// 数据库操作
		dop = new DatabaseOperation(this, db);
		lv_notes = (MyGridView) findViewById(R.id.lv_notes);
		
	}
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		// 显示记事列表
		showNotesList();
		// 为记事列表添加监听器
		lv_notes.setOnItemClickListener(new ItemClickEvent());
		// 为记事列表添加长按事件
		lv_notes.setOnItemLongClickListener(new ItemLongClickEvent());
	}

	// 显示记事列表
	private void showNotesList() {
		// 创建或打开数据库 获取数据
		dop.create_db();
		//获取数据库内容
		Cursor cursor = dop.query_db();
		if (cursor.getCount() > 0) {
			List<SQLBean> list = new ArrayList<SQLBean>();//日记信息集合里
			while (cursor.moveToNext()) {// 光标移动成功
				// 把数据取出
				SQLBean bean = new SQLBean();//创建数据库实体类
				//保存日记信息id到实体类
				bean.set_id("" + cursor.getInt(cursor.getColumnIndex("_id")));
				bean.setContext(cursor.getString(cursor.getColumnIndex("context")));
				//保存日记内容到实体类

				bean.setFl(cursor.getString(cursor.getColumnIndex("contextfl")));
				//保存日记FFFFFFFFFFFFFFFFFFLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL到实体类

				//保存日记标题到实体类
				bean.setTitle(cursor.getString(cursor.getColumnIndex("title")));
				//保存日记记录时间到实体类
				
				bean.setLock(cursor.getString(cursor.getColumnIndex("lock")));
				list.add(bean);//把保存日记信息实体类保存到日记信息集合里
			}
			//倒序显示数据
			Collections.reverse(list);
			adapter = new MainAdapter(list, this);//装载日记信息到首页
			lv_notes.setAdapter(adapter);//日记列表设置日记信息适配器
		}
		dop.close_db();//关闭数据库
	}

 

根据代码分析,因为在 AddActivity.java 中,当用户更改分类后,没有对分类进行保存操作,而是直接退出了该页面,从而导致数据丢失。建议在用户选择分类后,点击保存按钮时,将数据保存到数据库中,以免数据丢失。具体方式可参考以下示例代码:

bt_save.setOnClickListener(new ClickEvent(){
    public void onClick(View v){
        //将用户编辑的数据保存到数据库中
        SQLBean bean = new SQLBean();
        bean.setTitle(et_Notesbt.getText().toString());
        bean.setContext(et_Notes.getText().toString());
        bean.setFl(contextfl);
        dop.create_db();
        if(editModel.equals("newAdd")){
            dop.insert_db(bean);
        }else if(editModel.equals("update")){
            dop.update_db(item_Id, bean);
        }
        dop.close_db();
        //返回上一页面
        finish();
    }
});

在保存操作时,首先将用户编辑的数据保存到 SQLBean 实体类中,然后根据页面是新增还是编辑来调用不同的数据库操作语句。最后关闭数据库并返回上一页面。