Я разработал приложение для 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);
?>
где это проблема? У вас были какие-то результаты? – bader
Здесь, похоже, нет вопроса. –