Загрузить изображение на сервер из imagepath, хранящегося в базе данных Sqlite в Android - PullRequest
0 голосов
/ 22 января 2019

Первоначально приложение выполняет следующие действия:

  1. Получение данных от пользователя, включая изображение, и сохранение в базе данных Sqlite.
  2. путь к изображению хранится в Sqlite db.

Целью приложения является автоматическая загрузка данных, и я могу сделать это успешно, используя BroadcaseReciever для текста с использованием Volley, но застрял, поскольку не знаю, как происходит загрузка изображения с Android.

  1. Я могу получить путь к изображению из базы данных, но не знаю, что делать дальше.

Я провел честное исследование, но не нашел решения, когда нужно загрузить изображение на сервер из imagepath, хранящегося в Sqlite. Ниже приведен пример пути к изображению, хранящемуся в sqlite. (Я новичок в Android)

/storage/emulated/0/Pictures/1547728376728.jpg

Ниже кода, с которого я работаю. PS: я считаю, что целью метода getimagepath было бы: 1. найти изображение 2. преобразовать его в байты 3. передать в Volley. Я застрял на 1. и код может быть неправильным.

    package com.example.narendra.e5.activities.Connectivity;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Base64;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.example.narendra.e5.activities.database.DatabaseHelper;
import com.example.narendra.e5.activities.others.AppSingleton;
import com.example.narendra.e5.activities.others.MySingleton;

import org.json.JSONException;
import org.json.JSONObject;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.util.HashMap;
import java.util.Map;

public class NetworkMonitor extends BroadcastReceiver {
    Context context;
    public Bitmap bitmap;
    @Override
    public void onReceive(final Context context, Intent intent) {
        if (checkNetworkConnection(context)){
            Toast.makeText(context, "Hello hello", Toast.LENGTH_LONG).show();
            final DatabaseHelper db=new DatabaseHelper(context);
            SQLiteDatabase database=db.getWritableDatabase();
            Cursor cursor=db.getdataIncoming(database);
            while (cursor.moveToNext()){

                final String incoming=cursor.getString(cursor.getColumnIndex(DatabaseHelper.INCOMINGTIME));
                Toast.makeText(context, incoming, Toast.LENGTH_LONG).show();
                final String INVENID=cursor.getString(cursor.getColumnIndex(DatabaseHelper.INVENIDAPP));
                final String imageurl=cursor.getString(cursor.getColumnIndex(DatabaseHelper.SLIP_IMAGE));

                // get image path  from database and convert it into bitmap
                // Uri uri = Uri.parse(imageurl);
               // bitmap=MediaStore.Images.Media.getBitmap();

                StringRequest stringRequest=new StringRequest(Request.Method.POST, DatabaseHelper.SERVER_URL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                try {
                                    JSONObject jsonObject=new JSONObject(response);
                                    String getResponse=jsonObject.getString("response");
                                    if (getResponse.equals("OK")){
                                        Toast.makeText(context, "Response ok", Toast.LENGTH_LONG).show();
                                        //db.deleteOfflineSaveOutgoingDetails(INVENID);




                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }

                            }
                        }, new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Toast.makeText(context, "Response error", Toast.LENGTH_LONG).show();

                    }
                }
                ){
                    @Override
                    protected Map<String, String> getParams() throws AuthFailureError {
                        Map<String,String> params=new HashMap<>();
                        params.put("name",incoming);
                       // params.put("image",getimagepath(imageurl));
                        return params;
                    }
                }
                        ;
                MySingleton.getInstance(context).addToRequestQue(stringRequest);


            }
        }

    }
    public  boolean checkNetworkConnection(Context context){
        ConnectivityManager connectivityManager= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo networkInfo=connectivityManager.getActiveNetworkInfo();
        return (networkInfo!=null && networkInfo.isConnected());
    }
    public  String getimagepath(Intent imageurl){
      // File imagepath=new File(String.valueOf(imageurl));
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        Uri imagePath = imageurl.getData();
        bitmap=BitmapFactory.decodeFile(String.valueOf(imagePath));
        bitmap.compress(Bitmap.CompressFormat.JPEG,60,byteArrayOutputStream);
        byte[] imgByte=byteArrayOutputStream.toByteArray();
        return Base64.encodeToString(imgByte,Base64.DEFAULT);






    }
}

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я решил проблему, исправив метод public String getimagepath(Intent imageurl) на это:

 public  String getimagepath(String imageurl){
  // File imagepath=new File(String.valueOf(imageurl));
    ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
    //Uri imagePath = imageurl.getData();
    if (imageurl !=null){
       // Uri imagePath = Uri.fromFile(new File(imageurl));


        bitmap=BitmapFactory.decodeFile(imageurl);
        bitmap.compress(Bitmap.CompressFormat.JPEG,60,byteArrayOutputStream);
        byte[] imgByte=byteArrayOutputStream.toByteArray();
        return Base64.encodeToString(imgByte,Base64.DEFAULT);
    }
    else {

        return null;
    }


}
0 голосов
/ 22 января 2019

Для POST вы можете использовать JsonObjectRequest таким образом. Нет необходимости переопределять метод getParams.

            HashMap<String,String> maps=new HashMap<>();

            maps.put("name",incoming);
            maps.put("image",getimagepath(imageurl));

            JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.POST, YOUR_URL, new JSONObject(maps), new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {



                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {



                }
            });
            jsonObjectRequest.setTag("TAG");
            jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(2,0f));
            VolleySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...