关于android的坑
坑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的坑的更多相关文章
- Android填坑—Error:Execution failed for task ':app:transformClassesWithDexForRelease'
昨晚正在干着自己的事,另外一个同学说项目打包不了,但是可以debug运行.又急着需要打包apk发给那边人去测试.真的是搞事情,赶紧打开项目试试打包.项目从之前的$Eclipse$中转过来的,清楚的记得 ...
- Android爬坑之路
做了那么久前端,现在终于可以回到我的老本行, 今天我用了一天的时间配置里Android开发环境,mac和windows双平台,eclipse和IDEA双平台,别问为什么,我就喜欢,中间大坑不断,再加上 ...
- Android填坑系列:在小米系列等机型上放开定位权限后的定位请求弹框
背景: 近期因实际项目需要,在特定操作下触发定位请求,取到用户位置及附近位置. 问题: 经初步选型,最终决定接入百度定位,按照百度定位SDK Android文档,接入过程相对顺利.但随后发现,在小米系 ...
- Android爬坑之旅:软键盘挡住输入框问题的终极解决方案
前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面 ...
- ReactNative for Android入坑(一)
最近找工作发现有些公司要求会ReactNative,决定入坑. 搭建环境:官网详细的教程附链接. 坑一:FQ,建议整个搭建过程中FQ.(FQ链接,注册有200M试用流量,环境搭建够了)第一步:安装Ch ...
- Android WebView坑摘要
要抓好近期iPad HybridApp至Android举,坑遇到太多.让我折腾过Android临近4在退伍军人头痛! 今天前者被列出,以满足,然后慢慢自己解决.现在,它已经解决android键盘覆盖问 ...
- android 趟坑记
又是一个伤感的故事,但阿古好像已经习以为常了. 大半年的辛苦又泡汤了,故事是这样. 帝都某高端小区,封闭局域网,做一个可视对讲+门禁的APP,之前那一版因为使用了商业代码,又不想花钱,于是找阿古换一个 ...
- Android填坑系列:Android JSONObject 中对key-value为null的特殊处理
在与服务端通过JSON格式进行交互过程中,不同版本的JSON库在对于key-value为null情况上的处理不同. Android自带的org.json对key-value都要求不能为null,对于必 ...
- Android MonoGame坑记
1.Content 加载声音API错误: 2.TouchPanel.GetState()属于抢占式的,用一次后面不能继续使用,否则状态尚属第一次: 3.TouchPanel 坐标来自于硬件本身: 4. ...
随机推荐
- android下tcpdump抓包
tcpdump是最快捷方便的抓包方式,还可以加深对网络协议的理解.android下可以通过如下方式抓包: 1 Android上启动tcpdump Android设备可以把tcpdump的可执行文件上传 ...
- POJ 1222 EXTENDED LIGHTS OUT(高斯消元)
[题目链接] http://poj.org/problem?id=1222 [题目大意] 给出一个6*5的矩阵,由0和1构成,要求将其全部变成0,每个格子和周围的四个格子联动,就是说,如果一个格子变了 ...
- Nitrous.IO融资665万美元 帮助开发者省去配置调试等工作-CSDN.NET
Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine Nitrous.IO融资665万美元 ...
- 关于cvScalar的那些事
CvScalar 可存放在1-,2-,3-,4-TUPLE类型的捆绑数据的容器 该函数包含4个浮点成员,可以用来表示B(Blue),G(Green),R(Red),Alpha(表示图像的透明度) ty ...
- 一个简单顺序表的C++实现
/* SList.cpp Author: Qiang Xiao Time: 2015-07-11 */ #include<iostream> using namespace std; ; ...
- JAVA中把ResultSet转换成LIST
项目中老是遇到数据库异常关闭的情况,真烦, 想用hibernate呢,那个玩意儿又太笨重,感慨C#和PHP的舒适方便性,模拟TP写了个数据处理层,将就用着先代码里有很多项目中的东西,不要直接COPY了 ...
- Linux下 保存 git账号密码
一.通过文件方式 1.在~/下, touch创建文件 .git-credentials, 用vim编辑此文件,输入内容格式: touch .git-credentials vim .git-crede ...
- python安装集成包
anaconda, 包含各种科学运算包以及astropy.装完它一劳永逸. https://www.continuum.io/downloads
- mybatis一对一关联表查询
先创建一个表 CREATE TABLE teacher( t_id INT PRIMARY KEY AUTO_INCREMENT, t_name ) ); CREATE TABLE class( c_ ...
- javascript closure 闭包 事件绑定
先来一个基本的例子 <!-- 实现一段脚本,使得点击对应链接alert出相应的编号 --> <meta http-equiv="Content-Type" con ...