我们正尝试使用以下代码段上传图片:
protected void onActivityResult(int requestCode, int resultcode, Intent intent)
{
super.onActivityResult(requestCode, resultcode, intent);
if (requestCode == 1)
{
if (intent != null && resultcode == RESULT_OK)
{
Uri selectedImage = intent.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};
Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null);
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String filePath = cursor.getString(columnIndex);
cursor.close();
if(bmp != null && !bmp.isRecycled())
{
bmp = null;
}
bmp = BitmapFactory.decodeFile(filePath);
iv.setBackgroundResource(0);
iv.setImageBitmap(bmp);
File file = new File(filePath);
try {
fis = new FileInputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try
{
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://10.0.2.2/imgdb","root", "virus");
PreparedStatement ps =
con.prepareStatement("Update user_info set image=? WHERE ID=\""+id+"\"");
ps.setBinaryStream(1,fis,(int)file.length());
ps.executeUpdate();
ps.close();
fis.close();
}
catch(Exception e)
{
Toast.makeText(this,e.toString(),Toast.LENGTH_LONG).show();
}
}
else
{
Log.d("Status:", "Photopicker canceled");
}
}
在mysql DB上传后我们得到了[BLOB - 60.1KiB] ..图片上传是否成功? 我们正试图通过以下代码检索它
try {
Class.forName("com.mysql.jdbc.Driver");
con=DriverManager.getConnection("jdbc:mysql://10.0.2.2/imgdb","root","virus");
Statement st = con.createStatement();
String query = "Select image from user_info where ID=\""+id+"\"";
PreparedStatement pstmt = con.prepareStatement(query);
ResultSet rset = pstmt.executeQuery();
rset.next();
byte[] blob = rset.getBytes(1);//getBlob(1);
if(blob != null) {
byte[] decodedString = Base64.encode(blob, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
iv.setImageBitmap(decodedByte);
} else {
iv.setImageResource(R.drawable.chit_chat); }
但我们无法在图片视图中显示。
答案 0 :(得分:1)
直接从android使用sql连接不是一个好主意,你可以通过一个Web服务或一个负责将数据放入和返回数据库的套接字连接来提供服务。
数据库连接成本高昂,需要比httpconnections更稳定。不适合移动环境。 Here是一个很好的解决方案。
此外,让数据库靠近您的服务器可以帮助您分离问题。您将能够在服务器上测试从DB获得的字节是否是您所期望的,并使用简单的asynctask来获取android上的图像。
如果您坚持使用您的解决方案,您应该打印出从数据库收到的字节,为什么要使用base64?
答案 1 :(得分:0)
使用decode代替编码
byte[] decodedString = Base64.decode(blob, Base64.DEFAULT);