关于android的坑

  

坑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

时间: 2024-10-29 19:11:52

关于android的坑的相关文章

2018.11.28 Android踩坑(读写文件)

在学到使用Android Device Monitor 查看文件的时候,发现Android Device Monitor在Android Studio里面找不到了,网上查了原来是被官方弃用了,现在通过命令行的方式启动 1.打开Project Structure找到sdk安装路径 2.找到这个路径打开里面tools文件夹下面的monitor.bat双击运行即可打开Android Device Monitor 虽然说找到了Android Device Monitor,但是打开报了个Could not

ReactNative for Android入坑(一)

最近找工作发现有些公司要求会ReactNative,决定入坑. 搭建环境:官网详细的教程附链接. 坑一:FQ,建议整个搭建过程中FQ.第一步:安装Chocolatey,管理员运行cmd,输入指令: Chocolatey安装官网指令:@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org

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

前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText.对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:android:windowSoftInputMode的值adjustPan或者adjustResi

微信小程序开发之IOS/Android兼容坑(持续更新)

一.时间转换问题: 这不只是小程序上面的问题是ios系统 都有这个问题就是new  Date("2017-06-16") 在IOS会出现NAN的情况所以对于时间转换需要另行封装,解决方案如下 1.替换”-“为”/“ 2.删除”.“后面的字符串(带毫秒也会有问题) 二.定位问题 整个页面的fixed定位,在ios下下拉会触发下拉事件,但是没有动画效果.Android就能正常运行 三.absolute定位问题, 这不属于手机兼容问题 使用absolute定位,并且宽带设置了100% 并且设

android踩坑日记1

Android四大组件-活动.服务.广播.碎片 情况一 应用场景:定时从服务器获取数据,然后活动或者碎片中根据最新获得的数据,更新UI. 思考: 首先定时,想到定时器,推荐使用系统自带的AlertManager,而它需要启动一个pendingIntent,所以想到将它放在一个服务中,然后定时启动服务,其次,要从服务器获取数据,不可以在主线程中进行,所以需要异步加载,想到AsynTask,再接着考虑,活动或者碎片要根据最新的数据进行UI更新,那么如何进行更新呐?这里想到广播,前边通过定时器固定时间

Android爬坑之旅之不易发现的BUG

在Android的app开发过程中,除了机型适配等问题,常常还会出一些特殊的bug,这些bug往往需要特殊的场景情况下才会发生,这里罗列了一些平时项目中遇到的问题及注意点. App打包apk安装后重复启动根界面的问题 这个问题很特殊,一般情况下很难被发现,是Android系统一直以来的一个Bug. 当我们把app打包成apk安装程序,通过点击apk文件进行安装时,会启动安装界面, 并在安装成功后会跳转安装完成界面, 如图: 我们点击图中的 打开按钮,此时会启动我们的app 这里为了让大家更容易理

【Android开发坑系列】如何让Service尽可能存活

流行的思路如下: 1.让Service杀不死.Service的onStartCommand返回START_STICKY,同时onDestroy里面调用startService启动自身. 2.让Service从后台变成前置.在Android 2.0以前有效,借助setForeground(true). 3.让某个进程不被系统的low memory killer杀死(如数据缓存进程,或状态监控进程,或远程服务进程).add android:persistent="true" into th

Android MonoGame坑记

Content 加载声音API错误: TouchPanel.GetState()属于抢占式的,用一次后面不能继续使用,否则状态尚属第一次: TouchPanel 坐标来自于硬件本身: 本身Sprite不支持拉伸适配: 也许Game 和 Active 次序问题,这点也不能按照惯性用法使用,创建后并没有初始化,不能直接使用: Xamarin 本身的 Android 版本问题: 相同手机换计算机开发问题: Asset文件流直接流加载问题: Xamarin SSL 客户端极大不同于Windows: 待续

HDOJ 5099 Comparison of Android versions 坑题

现场赛的时候错了十四次. . ... Comparison of Android versions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 76    Accepted Submission(s): 60 Problem Description As an Android developer, itˇs really not e