使用 POST 存储来自以编程方式添加的 ImageView 的多个图像

Store multiple Image from programatically added ImageView with POST

我有 EditText 和 Button,我可以在 EditText 中输入我想在我的应用程序上显示多少个 ImageView 的数字。比方说,我写 3 然后它会在布局上显示 3 个 ImageViews 并且工作正常。

我成功拍照并显示在那些 ImageView 上。

container.removeAllViews();
                for (int i = 1; i <= no; i++) {
                    final View addView = layoutInflater.inflate(R.layout.shelter_row, null);
                    txtV1 = (TextView) addView.findViewById(R.id.txtV1);
                    txtV1.setText(String.valueOf(i));
                    addView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            imgLantai = (ImageView)view.findViewById(R.id.imgLantai);
                            Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                            startActivityForResult(intent,CAMERA_10);
                        }
                    });
                    container.addView(addView);
                }

我尝试获取位图并将其显示在 ImageView 上。有效

if(requestCode == CAMERA_10){
        if(resultCode == RESULT_OK){
            Bitmap bitmap = (Bitmap) data.getExtras().get("data");
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.JPEG, 100, output);
            byte[] byte_arr = output.toByteArray();
            mbitmap10 = Base64.encodeToString(byte_arr, Base64.DEFAULT);
            imgLantai.setImageBitmap(bitmap);
        }else if(resultCode == RESULT_CANCELED){
        }
    }

通过使用提交按钮,我尝试使用 POST

将位图插入数据库
public void insertFoto(){

    final String URL = "http://www.lineitopkal.com/genset/insert_site.php";

    final ProgressDialog loading = ProgressDialog.show(this,"Uploading...","Please wait...",false,false);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            if(response.contains("success")) {
                loading.dismiss();
                Toast.makeText(getApplicationContext(),mbitmap01,Toast.LENGTH_SHORT).show();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            loading.dismiss();
            Toast.makeText(getApplicationContext(),"Data gagal disimpan",Toast.LENGTH_SHORT).show();
        }
    }){
        @Override
        protected Map<String, String> getParams(){
            Map<String, String> params = new HashMap<String, String>();
            params.put("lantai",mbitmap10);
            return params;
        }
    };

    stringRequest.setRetryPolicy(new DefaultRetryPolicy(0, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

    RequestQueue rq = Volley.newRequestQueue(this);
    rq.add(stringRequest);
}

我似乎无法使用 POST 将所有图像(mbitmap10 图像)存储在数据库中。仅存储最新图像。我应该使用数组来存储图像吗?如果是这样,我该如何实施?还是有别的办法?

注意:这是一般性的pseudo-code,用于演示概念和回答一般性问题

1) 在您的应用中放置一个空的位图数组:

Bitmap[] allBitmaps = new Bitmap[];

2) 每次将新图像分配给其中一个图像视图时,将其添加到图像视图对应位置的数组中 -- allBitmaps[2] = imageView2.getBitmap...

3) 然后,当用户点击提交时,执行如下操作:

@Override
    protected Map<String, String> getParams(){
        Map<String, String> params = new HashMap<String, String>();

        // int paramNumber = 0;

        // for (bitmap : allBitmaps) {

        // params.put"paramNumber.toString()",bitmap);

        // paramNumber ++;

        // }

        return params;
    }