坑1:

使用SQLiteOpenHelper的时候如果建立的表中存在不为空的字段,但是用ContentValues()的方式来插入数据的话恰好没有往这个字段里插入数据,那么执行后市没法往数据库里插入数据的。单是写在这里可能觉得这个问题很平常,下面以代码的形式展示出来。

MySqliteDatabase.java

  1. package com.jikexueyuan.hellonotes;
  2.  
  3. import android.content.Context;
  4. import android.database.sqlite.SQLiteDatabase;
  5. import android.database.sqlite.SQLiteDatabase.CursorFactory;
  6. import android.database.sqlite.SQLiteOpenHelper;
  7.  
  8. public class MySqliteDatabase extends SQLiteOpenHelper {
  9. public static final String _ID = "_id";
  10. public static final String CONTENT = "content";
  11. public static final String TIME = "time";
  12. public static final String TABLE = "mydiary";
  13. public static final String TABLE_DRAFT = "draft";
  14. public static final String DATABASENAME = "wyldb.db";
  15.  
  16. public MySqliteDatabase(Context context, String name,
  17. CursorFactory factory, int version) {
  18. super(context, name, factory, version);
  19. // TODO Auto-generated constructor stub
  20.  
  21. }
  22.  
  23. /**
  24. * 三个参数的构造器
  25. *
  26. * @param context
  27. * @param name
  28. * @param factory
  29. */
  30. public MySqliteDatabase(Context context) {
  31. this(context, DATABASENAME, null, 1);
  32. System.out.println("MySqliteDatabase.MySqliteDatabase()构造器,新建表:"
  33. + DATABASENAME + "...");
  34. }
  35.  
  36. @Override
  37. public void onCreate(SQLiteDatabase db) {
  38. // TODO Auto-generated method stub
  39. System.out.println("MySqliteDatabase.onCreate(),创建表...");
  40. db.execSQL("create table mydiary(_id integer primary key autoincrement,content text not null,time text not null)");
  41. db.execSQL("create table draft(_id integer primary key autoincrement,content text not null,time text not null)");
  42. }
  43.  
  44. @Override
  45. public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  46. // TODO Auto-generated method stub
  47.  
  48. }
  49.  
  50. }

DetailActivity.java

  1. package com.jikexueyuan.hellonotes;
  2.  
  3. import java.text.SimpleDateFormat;
  4. import java.util.Date;
  5.  
  6. import android.app.Activity;
  7. import android.content.ContentValues;
  8. import android.content.Intent;
  9. import android.database.sqlite.SQLiteDatabase;
  10. import android.os.Bundle;
  11. import android.view.View;
  12. import android.view.View.OnClickListener;
  13. import android.widget.Button;
  14. import android.widget.EditText;
  15. import android.widget.Toast;
  16.  
  17. public class DetailActivity extends Activity implements OnClickListener {
  18. EditText et_detail;
  19. Button btn_edit, btn_delete, btn_detail_save;
  20. String val;
  21.  
  22. @Override
  23. protected void onCreate(Bundle savedInstanceState) {
  24. // TODO Auto-generated method stub
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.detail);
  27. et_detail = (EditText) findViewById(R.id.et_detail);
  28. btn_edit = (Button) findViewById(R.id.btn_edit);
  29. btn_delete = (Button) findViewById(R.id.btn_delete);
  30. btn_detail_save = (Button) findViewById(R.id.btn_detail_save);
  31. btn_edit.setOnClickListener(this);
  32. btn_delete.setOnClickListener(this);
  33. btn_detail_save.setOnClickListener(this);
  34. Intent intent = getIntent();
  35. val = intent.getExtras().getString(FirstActivity.KEY_CONTENT);
  36. if (!val.equals("") || val == null) {
  37. // Toast.makeText(this, "获取的值不为空,已经设置,,", 0).show();
  38. et_detail.setText(val);
  39. et_detail.setSelection(val.length());// 设置光标到最后
  40. }
  41.  
  42. }
  43.  
  44. @Override
  45. public void onClick(View v) {
  46. // TODO Auto-generated method stub
  47. MySqliteDatabase db = new MySqliteDatabase(DetailActivity.this);
  48. SQLiteDatabase sdb = db.getWritableDatabase();
  49. switch (v.getId()) {
  50. case R.id.btn_edit:
  51. et_detail.setEnabled(true);// 设置文本克可编辑
  52. // 可编辑的时候删除按钮隐藏,保存按钮可见
  53. btn_delete.setVisibility(View.GONE);
  54. btn_detail_save.setVisibility(View.VISIBLE);
  55. System.out.println("===val:" + val + ",====");
  56. // 同时还要删除
  57. sdb.delete(MySqliteDatabase.TABLE, MySqliteDatabase.CONTENT + "=?",
  58. new String[] { val });// 有报错,暂时不处理
  59. break;
  60. case R.id.btn_detail_save:
  61. String content = et_detail.getText().toString();
  62. ContentValues cv = new ContentValues();
  63.  
  64. SimpleDateFormat format = new SimpleDateFormat();
  65. Date date = new Date();
  66. String time = format.format(date);
  67. cv.put(MySqliteDatabase.CONTENT, content);
  68. /*
  69. * 之前没有插入time这个值,但是因为这个表里的time字段不能够为空,导致下main的代码都
  70. * 没正确执行,即不能够按照预期把文本内容插入到数据库。
  71. */
  72. cv.put(MySqliteDatabase.TIME, time);
  73. System.out.println("-----btn_detail_save:content= ----");
  74. sdb.insert(MySqliteDatabase.TABLE, null, cv);
  75. Intent intent = new Intent(DetailActivity.this, FirstActivity.class);
  76. startActivity(intent);
  77. finish();
  78. break;
  79.  
  80. default:
  81. break;
  82. }
  83. }
  84. }

具体代码:http://pan.baidu.com/s/1sjIJRit

坑2:viewpager与fragment一起用的时候,需要传入fragment作为参数,在自己的Fragment实现类中有一个必须复写的方法,

public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState){

}

,具体的坑如下:

  1. public class Fragment2 extends Fragment {
  2. @Override
  3. public View onCreateView(LayoutInflater inflater,
  4. @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  5. // return inflater.inflate(R.layout.view2, container, true);
  6. // 这里的第二个参数只能填写null,不能像上面一行注释的那样填写container,
  7. // 否则会报错:The specified child already has a parent. You must call
  8. // removeView() on the child's parent first.
  9. return inflater.inflate(R.layout.view2, null, true);
  10. }
  11. }

同时也可以参见:http://blog.csdn.net/mcy478643968/article/details/26812225 ,具体源码可见百度网盘里的Wyl.rar。

关于android的坑的更多相关文章

  1. Android填坑—Error:Execution failed for task ':app:transformClassesWithDexForRelease'

    昨晚正在干着自己的事,另外一个同学说项目打包不了,但是可以debug运行.又急着需要打包apk发给那边人去测试.真的是搞事情,赶紧打开项目试试打包.项目从之前的$Eclipse$中转过来的,清楚的记得 ...

  2. Android爬坑之路

    做了那么久前端,现在终于可以回到我的老本行, 今天我用了一天的时间配置里Android开发环境,mac和windows双平台,eclipse和IDEA双平台,别问为什么,我就喜欢,中间大坑不断,再加上 ...

  3. Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框

    背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...

  4. Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

    前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面 ...

  5. ReactNative for Android入坑(一)

    最近找工作发现有些公司要求会ReactNative,决定入坑. 搭建环境:官网详细的教程附链接. 坑一:FQ,建议整个搭建过程中FQ.(FQ链接,注册有200M试用流量,环境搭建够了)第一步:安装Ch ...

  6. Android WebView坑摘要

    要抓好近期iPad HybridApp至Android举,坑遇到太多.让我折腾过Android临近4在退伍军人头痛! 今天前者被列出,以满足,然后慢慢自己解决.现在,它已经解决android键盘覆盖问 ...

  7. android 趟坑记

    又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...

  8. Android填坑系列:Android JSONObject 中对key-value为null的特殊处理

    在与服务端通过JSON格式进行交互过程中,不同版本的JSON库在对于key-value为null情况上的处理不同. Android自带的org.json对key-value都要求不能为null,对于必 ...

  9. Android MonoGame坑记

    1.Content 加载声音API错误: 2.TouchPanel.GetState()属于抢占式的,用一次后面不能继续使用,否则状态尚属第一次: 3.TouchPanel 坐标来自于硬件本身: 4. ...

随机推荐

  1. android下tcpdump抓包

    tcpdump是最快捷方便的抓包方式,还可以加深对网络协议的理解.android下可以通过如下方式抓包: 1 Android上启动tcpdump Android设备可以把tcpdump的可执行文件上传 ...

  2. POJ 1222 EXTENDED LIGHTS OUT(高斯消元)

    [题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...

  3. Nitrous.IO融资665万美元 帮助开发者省去配置调试等工作-CSDN.NET

    Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine Nitrous.IO融资665万美元 ...

  4. 关于cvScalar的那些事

    CvScalar 可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器 该函数包含4个浮点成员,可以用来表示B(Blue),G(Green),R(Red),Alpha(表示图像的透明度) ty ...

  5. 一个简单顺序表的C++实现

    /* SList.cpp Author: Qiang Xiao Time: 2015-07-11 */ #include<iostream> using namespace std; ; ...

  6. JAVA中把ResultSet转换成LIST

    项目中老是遇到数据库异常关闭的情况,真烦, 想用hibernate呢,那个玩意儿又太笨重,感慨C#和PHP的舒适方便性,模拟TP写了个数据处理层,将就用着先代码里有很多项目中的东西,不要直接COPY了 ...

  7. Linux下 保存 git账号密码

    一.通过文件方式 1.在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入内容格式: touch .git-credentials vim .git-crede ...

  8. python安装集成包

    anaconda, 包含各种科学运算包以及astropy.装完它一劳永逸. https://www.continuum.io/downloads

  9. mybatis一对一关联表查询

    先创建一个表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_ ...

  10. javascript closure 闭包 事件绑定

    先来一个基本的例子 <!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <meta http-equiv="Content-Type" con ...