- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我使用以下代码将 Uri
图像插入到 SQLite
中:
注册
private void insertData( String name,String pass, Uri image) throws SQLiteException {
database = mdb.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(MyDatabaseHelper.KEY_NAME, name);
cv.put(MyDatabaseHelper.KEY_PASSWORD, pass);
try {
database = mdb.getWritableDatabase();
InputStream iStream = getContentResolver().openInputStream(image);
byte[] inputData = Utils.getBytes(iStream);
cv.put(MyDatabaseHelper.KEY_IMAGE,inputData);
}catch(IOException ioe)
{
Log.e(TAG, "<saveImageInDB> Error : " + ioe.getLocalizedMessage());
}
database.insert(MyDatabaseHelper.TABLE_USER, null, cv);
Toast.makeText(getApplicationContext(),"Database Created",Toast.LENGTH_SHORT).show();
database.close();
}
当我看到 Database Created
时,我假设数据库已成功创建并且数据已插入。
在 Login 中,我希望根据用户名从 SQLite
检索图像。
name = (EditText) findViewById(R.id.name);
name.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable editable) {
String personName = name.getText().toString();
database = mdb.getWritableDatabase();
String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' ";
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image"));
Log.e("A", blob+"");
cursor.close();
mdb.close();
imageView.setImageBitmap(getRoundedBitmap(Utils.getImage(blob)));
}
else
{
Toast.makeText(getApplication(),"NULL",Toast.LENGTH_SHORT).show();
}
}
});
public Bitmap getRoundedBitmap(Bitmap bitmap){
Bitmap circleBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
BitmapShader shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
Paint paint = new Paint();
paint.setShader(shader);
paint.setAntiAlias(true);
Canvas c = new Canvas(circleBitmap);
c.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint);
return circleBitmap;
}
我的数据库助手
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final int DATABASE_VERSION=1;
public static final String DATABASE_NAME="mm.db";
public static final String TABLE_USER="User";
public static final String KEY_NAME="Name";
public static final String KEY_PASSWORD="Password";
public static final String KEY_IMAGE="Image";
public static final String ID="id";
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_USER + " ( " + ID + " INTEGER PRIMARY KEY ,Name TEXT,Password TEXT,Image BLOB )");
}
public void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) {
Log.w(MyDatabaseHelper.class.getName(), "Upgrading database from version" + oldVersion + "to" + newVersion + ",which will destroy all old data");
db.execSQL("Drop TABLE IF EXISTS " + TABLE_USER);
onCreate(db);
}
public MyDatabaseHelper(Context context)
{
super(context, DATABASE_NAME,null,1);
}
}
工具
public class Utils {
public static byte[] getImageBytes(Bitmap bitmap) {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
return stream.toByteArray();
}
public static Bitmap getImage(byte[] image) {
return BitmapFactory.decodeByteArray(image, 0, image.length);
}
public static byte[] getBytes(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
byteBuffer.write(buffer, 0, len);
}
return byteBuffer.toByteArray();
}
}
用户在 EditText
上输入他/她的名字后,名为 name
的图像没有检索,但向我显示 Null
消息!这里出了什么问题?
最佳答案
对于 EditText,每次 TextWatcher()
检测到文本更改时,afterTextChanged()
都会被调用,即在 EditText 中键入的每个字符都是一个textChange 事件。
因此,即使在键入整个用户名之前,afterTextChanged()
也会被多次调用,因此会出现空游标。但是,一旦用户名完全键入,光标就会提供正确的行,在您的情况下,是图像 blob。
正如您提到的,它是一个登录页面,因此必须有一个密码 editText 以及用户名 editText。
我建议的更好方法是使用 setOnFocusChangeListener()
检测用户名 EditText
的焦点变化。用户完成输入用户名后立即触发 Sql 查询,焦点现在位于密码 editText 上。
name = (EditText) findViewById(R.id.name);
name.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus) { //Fire Query when focus is lost
String personName = name.getText().toString();
database = mdb.getWritableDatabase();
String selectQuery = " SELECT " + MyDatabaseHelper.KEY_IMAGE + " FROM " + MyDatabaseHelper.TABLE_USER + " WHERE " + MyDatabaseHelper.KEY_NAME + " = ' " + personName + " ' ";
Cursor cursor = database.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
byte[] blob = cursor.getBlob(cursor.getColumnIndex("Image"));
Log.e("A", blob+"");
cursor.close();
mdb.close();
imageView.setImageBitmap(getRoundedBitmap(Utils.getImage(blob)));
}
else
{
Toast.makeText(getApplication(),"NULL",Toast.LENGTH_SHORT).show();
}
}
});
让我们知道这是否有效。
关于android - EditText afterTextChanged 不工作 : displays null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39492774/
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
这个问题在这里已经有了答案: Can we subtract NULL pointers? (4 个回答) 关闭 2 个月前。 是否定义了NULL - NULL? (char *)NULL - (ch
是否有推荐的方法(根据 .net Framework 指南)检查 null,例如: if (value == null) {//code1} else {//code2} 或 if (value !=
我正在尝试将值插入数据库,但出现这样的错误任何人都可以告诉我为什么该值为空,如下所示: An exception occurred while executing 'INSERT INTO perso
这个问题在这里已经有了答案: String concatenation with a null seems to nullify the entire string - is that desire
您好,我正在 Android 联系人搜索模块中工作。我正在查询下方运行。 cur = context.getContentResolver().query(ContactsContract.Data.
下面的 SQL 表定义说明了从我的 MYSQL 数据库创建表的语句之一,该数据库是由我公司的前开发人员开发的。 DROP TABLE IF EXISTS `classifieds`.`category
我主要有应用程序开发背景。在编程语言中 variable == null或 variable != null有效。 当涉及到 SQL 时,以下查询不会给出任何语法错误,但也不会返回正确的结果。 sel
我在尝试检查某些元素是否为 NULL 时遇到段错误或不。任何人都可以帮忙吗? void addEdge(int i, int j) { if (i >= 0 && j > 0)
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
在 SQL 服务器中考虑到以下事实:Col1 和 Col2 包含数值和 NULL 值 SELECT COALESCE(Col1,Col2) 返回一个错误:“COALESCE 的至少一个参数必须是一个不
下面查询的关系代数表达式是什么?我找不到“Is Null”的表达式。 SELECT reader.name FROM reader LEFT JOIN book_borrow ON reader.ca
我正在尝试使用三元运算符来检查值是否为 null 并返回一个表达式或另一个。将此合并到 LINQ 表达式时,我遇到的是 LINQ 表达式的 Transact-SQL 转换试图执行“column = n
我在给定的代码中看到了以下行: select(0, (fd_set *) NULL, (fd_set *) NULL, (fd_set *) NULL, &timeout); http://linux
var re = /null/g; re.test('null null'); //> true re.test('null null'); //> true re.test('null null')
这个问题在这里已经有了答案: 关闭 13 年前。 我今天避开了一场关于数据库中空值的激烈辩论。 我的观点是 null 是未指定值的极好指示符。团队中有意见的其他每个人都认为零和空字符串是可行的方法。
由于此错误,我无法在模拟器中运行我的应用: Error:null value in entry: streamOutputFolder=null 或 gradle - Error:null value
我正在尝试在 Android 应用程序中创建电影数据库,但它返回错误。知道这意味着什么吗? public Cursor returnData() { return db.query(TABLE
我一直在检查浏览器中的日期函数以及运行时间 new Date (null, null, null); 在开发工具控制台中,它给出了有效的日期 Chrome v 61 回归 Sun Dec 31 189
为什么 NA==NULL 会导致 logical (0) 而不是 FALSE? 为什么 NULL==NULL 会导致 logical(0) 而不是 TRUE? 最佳答案 NULL 是一个“零长度”对象
我是一名优秀的程序员,十分优秀!