2015-07-22 4 views
0

Я разработал приложение для Android, которое хранит снимки с камеры в базе данных MySQL. Я пытаюсь сохранить изображения в поле Blob в базе данных MySQL, но я не могу сохранить изображение в базе данных, а также не смог получить изображение из базы данных в моем представлении списка с ImageView. Как я могу это сделатьСохранение изображения в mySQL blob

Поскольку у меня не было достаточного ресурса для сохранения изображений в файл. Вот почему я принял этот метод.

Я использовал ниже класс, чтобы вставить изображение в базу данных.

public class AddingImage extends Activity { 
     protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_AddingImage); 

    } 

    public void Takeimage(View view) 
    { 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     startActivityForResult(intent, 0); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // TODO Auto-generated method stub 
     super.onActivityResult(requestCode, resultCode, data); 

     Bitmap Imgaegot =(Bitmap) data.getExtras().get("data"); 
     imgview.setImageBitmap(Imgaegot); 
    } 

    // Onclick method called to add new asset to the Database 
    public void SaveAssets(View v) 
    { 
      imgview.buildDrawingCache(); 
      Bitmap storeimage = imgview.getDrawingCache(); 

      String image_stores = ConverStringtobase64.encodeimageTobase64(storeimage); 

      try { 
       Storeencriptedvalue = normalTextEnc; 
       inesrttoDatabase(image_stores); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      finish(); 
    } 

    private void inesrttoDatabase(String Image) 
    { 
     class SendPostReqAsyncTask extends AsyncTask<String, Void,String> 
     { 
      @Override 
      protected String doInBackground(String... params) { 
       try 
       { 
        posttext(); 
       }catch (NullPointerException e) { 
        e.printStackTrace(); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 

      @Override 
      protected void onPostExecute(String s) { 
       super.onPostExecute(s); 

       Toast.makeText(getApplicationContext(), "Data Inserted", Toast.LENGTH_LONG).show(); 
      } 
     } 

     SendPostReqAsyncTask sendPostReqAsyncTask = new SendPostReqAsyncTask(); 
     sendPostReqAsyncTask.execute(Image); 
    } 

    private void posttext() 
    { 
     try { 
      Bitmap storeimage = imgview.getDrawingCache(); 
      String images = ConverStringtobase64.encodeimageTobase64(storeimage); ; 

      // setting a namevalues pairs 
      List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 

      //The string values are added to the namevaluespairs are added 
      nameValuePairs.add(new BasicNameValuePair("Assetimage",images)); 

      // the Default client is set 
      HttpClient httpClient = new DefaultHttpClient(); 
      /*A post request has been set along with the url to which the data will be posted to the 
      data that is posted will then be saved on to the database using the PHP script that is been called by the link 
      */ 
      HttpPost httpPost = new HttpPost("http://192.0.2.5/nfcams/insertingimage.php"); 

      // the values added to the namevalueParis is been passed using the httppost 
      httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

      // The HTTP POST request is execute 
      HttpResponse response = httpClient.execute(httpPost); 
      HttpEntity entity = response.getEntity(); 

      if (entity != null) { 
       String responseStr = EntityUtils.toString(entity).trim(); 
       Log.v("l", "Values have bee insertred: " + responseStr); 
      } 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

Я использовал приведенный ниже PHP-скрипт для вставки изображения в базу данных.

<?php 
    include("connection.php"); 

    $Assetimage = $_POST['Assetimage']; 

    $sqlinsert = "INSERT INTO `image` (`AImage`) VALUES ('{$Assetimage}')"; 

    $response = array(); 

    if(mysqli_query($con,$sqlinsert)) { 
      // successfully inserted into database 
      $response["success"] = 1; 
      $response["message"] = "Product successfully created."; 

      // echoing JSON response 
      echo json_encode($response); 
     } 
     else 
     { 
      // failed to insert row 
      $response["success"] = 0; 
      $response["message"] = "Oops! An error occurred."; 

      // echoing JSON response 
      echo json_encode($response); 
     } 

     mysqli_close($con); 
    ?> 

Я также использую класс для преобразования изображения в base64

public class ConverStringtobase64 { 
    // The below method encodes the image to an String using base64 the bitmapimage is taken from the 
    public static String encodeimageTobase64(Bitmap image) 
    { 
     //insta 
     Bitmap imagebit = image; 

     ByteArrayOutputStream img = new ByteArrayOutputStream(); 
     imagebit.compress(Bitmap.CompressFormat.PNG,100,img); 

     byte [] bt = img.toByteArray(); 
     String imageEncode = Base64.encodeToString(bt,Base64.DEFAULT); 
     return imageEncode; 

    } 


    public static Bitmap decodeImagetoBitmap(String imageDataString) { 


     byte[] decodedByte = Base64.decode(imageDataString, 0); 
     return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 

    } 

} 

Для извлечения значений из базы данных я использовал код ниже PHP

<?php 
include("connection.php"); 

$sql = "select * from `image`"; 

$res = mysqli_query($con,$sql); 

$result = array(); 

while($row = mysqli_fetch_array($res)){ 
array_push($result, 
array('id'=>$row['Assetid'], 
'AImage'=>base64_encode($row['AImage']) 
)); 
} 

echo json_encode($result); 

//mysql_close($con); 

?> 
+0

где это проблема? У вас были какие-то результаты? – bader

+0

Здесь, похоже, нет вопроса. –

ответ

2

новообращенные bitmap для строки генерировать строку в большую, убедитесь, что поле в базе данных является текстом типа поля и позволяет много символов

+0

Я изменил значения в моей базе данных от blob до TEXT и теперь работает thankx – NikhilRcop

Смежные вопросы