通过以编程方式添加ImageView并使用POST

时间:2018-03-28 04:37:11

标签: android post android-bitmap

我有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一个)存储在数据库中。仅存储了最新图像。我应该使用数组来存储图像吗?如果是这样,我该如何实现它?或者还有其他方式?

1 个答案:

答案 0 :(得分:1)

注意:这是一般伪代码,用于演示概念并回答一般性问题

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