坑1:

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

MySqliteDatabase.java

 package com.jikexueyuan.hellonotes;

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper; public class MySqliteDatabase extends SQLiteOpenHelper {
public static final String _ID = "_id";
public static final String CONTENT = "content";
public static final String TIME = "time";
public static final String TABLE = "mydiary";
public static final String TABLE_DRAFT = "draft";
public static final String DATABASENAME = "wyldb.db"; public MySqliteDatabase(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub } /**
* 三个参数的构造器
*
* @param context
* @param name
* @param factory
*/
public MySqliteDatabase(Context context) {
this(context, DATABASENAME, null, 1);
System.out.println("MySqliteDatabase.MySqliteDatabase()构造器,新建表:"
+ DATABASENAME + "...");
} @Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
System.out.println("MySqliteDatabase.onCreate(),创建表...");
db.execSQL("create table mydiary(_id integer primary key autoincrement,content text not null,time text not null)");
db.execSQL("create table draft(_id integer primary key autoincrement,content text not null,time text not null)");
} @Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }

DetailActivity.java

 package com.jikexueyuan.hellonotes;

 import java.text.SimpleDateFormat;
import java.util.Date; import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class DetailActivity extends Activity implements OnClickListener {
EditText et_detail;
Button btn_edit, btn_delete, btn_detail_save;
String val; @Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.detail);
et_detail = (EditText) findViewById(R.id.et_detail);
btn_edit = (Button) findViewById(R.id.btn_edit);
btn_delete = (Button) findViewById(R.id.btn_delete);
btn_detail_save = (Button) findViewById(R.id.btn_detail_save);
btn_edit.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_detail_save.setOnClickListener(this);
Intent intent = getIntent();
val = intent.getExtras().getString(FirstActivity.KEY_CONTENT);
if (!val.equals("") || val == null) {
// Toast.makeText(this, "获取的值不为空,已经设置,,", 0).show();
et_detail.setText(val);
et_detail.setSelection(val.length());// 设置光标到最后
} } @Override
public void onClick(View v) {
// TODO Auto-generated method stub
MySqliteDatabase db = new MySqliteDatabase(DetailActivity.this);
SQLiteDatabase sdb = db.getWritableDatabase();
switch (v.getId()) {
case R.id.btn_edit:
et_detail.setEnabled(true);// 设置文本克可编辑
// 可编辑的时候删除按钮隐藏,保存按钮可见
btn_delete.setVisibility(View.GONE);
btn_detail_save.setVisibility(View.VISIBLE);
System.out.println("===val:" + val + ",====");
// 同时还要删除
sdb.delete(MySqliteDatabase.TABLE, MySqliteDatabase.CONTENT + "=?",
new String[] { val });// 有报错,暂时不处理
break;
case R.id.btn_detail_save:
String content = et_detail.getText().toString();
ContentValues cv = new ContentValues(); SimpleDateFormat format = new SimpleDateFormat();
Date date = new Date();
String time = format.format(date);
cv.put(MySqliteDatabase.CONTENT, content);
/*
* 之前没有插入time这个值,但是因为这个表里的time字段不能够为空,导致下main的代码都
* 没正确执行,即不能够按照预期把文本内容插入到数据库。
*/
cv.put(MySqliteDatabase.TIME, time);
System.out.println("-----btn_detail_save:content= ----");
sdb.insert(MySqliteDatabase.TABLE, null, cv);
Intent intent = new Intent(DetailActivity.this, FirstActivity.class);
startActivity(intent);
finish();
break; default:
break;
}
}
}

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

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

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

}

,具体的坑如下:

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

同时也可以参见: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 SharedPreference最佳实践

    Android提供多种方式保存应用数据,其中一种方式是SharedPreferences,使用键值对保存私有基本的数据.所有的逻辑仅基于以下三个类: SharedPreferences SharedP ...

  2. HDU 3507 Print Article(CDQ分治+分治DP)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3507 [题目大意] 将长度为n的数列分段,最小化每段和的平方和. [题解] 根据题目很容易得到dp ...

  3. JAVA异常设计原则

    异常是面向对象语言非常重要的一个特性,良好的异常设计对程序的可扩展性.可维护性.健壮性都起到至关重要. JAVA根据用处的不同,定义了两类异常     * Checked Exception: Exc ...

  4. iOS 按钮倒计时功能

    iOS 按钮倒计时功能, 建议把按钮换成label,这样会避免读秒时闪烁 __block ; __block UIButton *verifybutton = _GetverificationBtn; ...

  5. stl非变易算法(二)

    这里接着上篇stl非变易算法(一)进行总结.主要解析算法函数count.count_if.mismatch.equal.search.search_n以及find_end.给出算法函数的实现及測试用例 ...

  6. .net-一般处理程序及生命周期

    IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHandler):是 ...

  7. 开启新的activity获取它的返回值

    1.开始界面 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...

  8. Sql Server 2008/2005 数据库还原出现 3154错误

    在Sql Server 2008/2005 数据库还原出现 3154错误 解决方法1:不要在数据库名字上点右键选择还原,而要是在根目录“数据库”三个字上点右键选择还原,然后再选择数据库,问题便可以解决 ...

  9. BZOJ 1189: [HNOI2007]紧急疏散evacuate( BFS + 二分答案 + 匈牙利 )

    我们可以BFS出每个出口到每个人的最短距离, 然后二分答案, 假设当前答案为m, 把一个出口拆成m个表示m个时间, 点u到出口v的距离为d, 那么u->v的[d, m]所有点连边, 然后跑匈牙利 ...

  10. 条款16:成对使用new和delete时,采取相同的形式

    问题聚焦:     我们都知道,new和delete要成对使用,但是有时候,事情往往不是按我们预期的那样发展.     对于单一对象和对象数组,我们要分开考虑.     遇到typedef时,也需要搞 ...