图片上传和下载

时间:2012-03-22 06:41:06

标签: android android-emulator

我们正尝试使用以下代码段上传图片:

       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);         }

但我们无法在图片视图中显示。

2 个答案:

答案 0 :(得分:1)

直接从android使用sql连接不是一个好主意,你可以通过一个Web服务或一个负责将数据放入和返回数据库的套接字连接来提供服务。

数据库连接成本高昂,需要比httpconnections更稳定。不适合移动环境。 Here是一个很好的解决方案。

此外,让数据库靠近您的服务器可以帮助您分离问题。您将能够在服务器上测试从DB获得的字节是否是您所期望的,并使用简单的asynctask来获取android上的图像。

如果您坚持使用您的解决方案,您应该打印出从数据库收到的字节,为什么要使用base64?

答案 1 :(得分:0)

使用decode代替编码

byte[] decodedString = Base64.decode(blob, Base64.DEFAULT);