【问题标题】:Default image is not getting replaced by the captured image for the first time默认图像第一次没有被捕获的图像替换
【发布时间】:2016-08-22 04:57:06
【问题描述】:

在我的应用程序中,我正在捕获图像并将其设置在第二个活动中,然后在执行一些操作后将其上传到服务器。如果特定 id 的图像存在,则在第一个图像视图中显示该图像其他活动显示一些默认图像。当我尝试通过捕获图像上传图像时,如果服务器中已经存在该 id 的图像,则捕获的图像正在第一个活动的图像视图中更新。如果该 id 没有图像,并且当我设置捕获的图像没有显示。如果我登录相同的 id,第二次显示。从第二个活动返回后如何刷新第一个活动。这是我的代码:

StudentDetails.java:
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_student_details);

   String IMAGE_URL = "http://xxx.xxx.xx.x/mobile_app/" + img_path + "/" + img_name;

    resultIv = (ImageView) findViewById(R.id.ProfilePicIV);
    new DownloadImageTask((ImageView) findViewById(R.id.ProfilePicIV))
            .execute(IMAGE_URL);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
        }
    });
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
        Bitmap imageData = null;
        if (resultCode == RESULT_OK) {
            imageData = (Bitmap) data.getExtras().get("data");        
            Intent i = new Intent(this, Image.class);
            i.putExtra("name", imageData);         
            startActivityForResult(i,3);

        } else if (resultCode == RESULT_CANCELED) {
            // User cancelled the image capture
        } else {
            // Image capture failed, advise user
        }
    } 
  else if (requestCode == 3) {
        onResume();
    }
}

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
    ImageView bmImage;

    public DownloadImageTask(ImageView bmImage) {
        this.bmImage = bmImage;
    }
    protected Bitmap doInBackground(String... urls) {
        String urldisplay = urls[0];
        Bitmap mIcon11 = null;
        try {
            InputStream in = new java.net.URL(urldisplay).openStream();
            mIcon11 = BitmapFactory.decodeStream(in);
        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }
        return mIcon11;
    }

    protected void onPostExecute(Bitmap result) {
        bmImage.setImageBitmap(result);
    }
}

@Override
public void onResume() {  
    // After a pause OR at startup
    super.onResume();
    getIntent();
    //Refresh your stuff here
    String img_name = getIntent().getStringExtra("img_name");
    String img_path = getIntent().getStringExtra("img_path");
    String IMAGE_URL = "http://xxx.xxx.xx.x/mobile_app/" + img_path + "/" + img_name;
    new DownloadImageTask((ImageView) findViewById(R.id.ProfilePicIV))
            .execute(IMAGE_URL);
}


StudentDetails.xml:
<ImageView
    android:id="@+id/ProfilePicIV"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:background="@drawable/man2"
    android:scaleType="fitXY" />

Image.java:

@覆盖 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image);

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    Bitmap bitmap = getIntent().getExtras().getParcelable("name");
    resultIv1.setImageBitmap(bitmap);
    resultIv.setImageBitmap(bitmap);

    String auid_t = getIntent().getStringExtra("auid_num");
    String imei_t = getIntent().getStringExtra("imei_num");
    auid_s.setText(auid_t);
    imei_s.setText(imei_t);

    text_position.setVisibility(View.GONE);
    doneBtn.setVisibility(View.GONE);
    doneBtn1.setVisibility(View.GONE);
    cancelBtn.setVisibility(View.GONE);
    text_upload.setVisibility(View.GONE);
    buttonUpload.setVisibility(View.GONE);
    buttonUpload1.setVisibility(View.GONE);
    cropView.setVisibility(View.GONE);
    toolbar1.setVisibility(View.GONE);
    toolbar.setVisibility(View.VISIBLE);
    resultIv.setVisibility(View.GONE);

    PassImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            cropView.setVisibility(View.VISIBLE);
            resultIv.setVisibility(View.GONE);
            resultIv1.setVisibility(View.GONE);
            text_position.setVisibility(View.VISIBLE);
            doneBtn.setVisibility(View.VISIBLE);
            cancelBtn.setVisibility(View.VISIBLE);
            text_size.setVisibility(View.GONE);
            PassImageBtn.setVisibility(View.GONE);
            StampImageBtn.setVisibility(View.GONE);
            toolbar1.setVisibility(View.VISIBLE);
            toolbar.setVisibility(View.GONE);
            Bitmap photo = getIntent().getExtras().getParcelable("name");
            resultIv.setImageBitmap(photo);

            // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
            Uri tempUri = getImageUri(getApplicationContext(), photo);
            // CALL THIS METHOD TO GET THE ACTUAL PATH
            File finalFile = new File(getRealPathFromURI(tempUri));
            int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 413, getResources().getDisplayMetrics());
            int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 531, getResources().getDisplayMetrics());
            cropView.of(Uri.fromFile(finalFile)).withAspect(x, y).initialize(Image.this);
        }
    });

    StampImageBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            cropView.setVisibility(View.VISIBLE);
            resultIv.setVisibility(View.GONE);
            resultIv1.setVisibility(View.GONE);
            text_position.setVisibility(View.VISIBLE);
            doneBtn1.setVisibility(View.VISIBLE);
            cancelBtn.setVisibility(View.VISIBLE);
            text_size.setVisibility(View.GONE);
            PassImageBtn.setVisibility(View.GONE);
            StampImageBtn.setVisibility(View.GONE);
            toolbar1.setVisibility(View.VISIBLE);
            toolbar.setVisibility(View.GONE);

            Bitmap photo = getIntent().getExtras().getParcelable("name");
            resultIv.setImageBitmap(photo);
            // CALL THIS METHOD TO GET THE URI FROM THE BITMAP
            Uri tempUri = getImageUri(getApplicationContext(), photo);
            // CALL THIS METHOD TO GET THE ACTUAL PATH
            File finalFile = new File(getRealPathFromURI(tempUri));
            int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 56, getResources().getDisplayMetrics());
            int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_PX, 7, getResources().getDisplayMetrics());
            cropView.of(Uri.fromFile(finalFile)).withAspect(x, y).initialize(Image.this);
        }
    });

    doneBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final ProgressDialog dialog = ProgressDialog.show(Image.this, null, "Please wait…", true, false);
            cropView.setVisibility(View.GONE);
            cancelBtn.setVisibility(View.GONE);
            doneBtn.setVisibility(View.GONE);
            text_position.setVisibility(View.GONE);
            resultIv.setVisibility(View.VISIBLE);
            buttonUpload.setVisibility(View.VISIBLE);
            buttonUpload1.setVisibility(View.GONE);
            text_upload.setVisibility(View.VISIBLE);
            new Thread() {
                public void run() {
                    croppedBitmap = cropView.getOutput();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // cropped image set
                            resultIv.setImageBitmap(croppedBitmap);
                        }
                    });
                    Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"));
                    CropUtil.saveOutput(Image.this, destination, croppedBitmap, 1);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            dialog.dismiss();
                        }
                    });
                }
            }.start();
        }
    });

    doneBtn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            final ProgressDialog dialog = ProgressDialog.show(Image.this, null, "Please wait…", true, false);
            cropView.setVisibility(View.GONE);
            cancelBtn.setVisibility(View.GONE);
            doneBtn1.setVisibility(View.GONE);
            text_position.setVisibility(View.GONE);
            resultIv.setVisibility(View.VISIBLE);
            buttonUpload1.setVisibility(View.VISIBLE);
            buttonUpload.setVisibility(View.GONE);
            text_upload.setVisibility(View.VISIBLE);
            new Thread() {
                public void run() {
                    croppedBitmap = cropView.getOutput();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // cropped image set
                            resultIv.setImageBitmap(croppedBitmap);
                        }
                    });
                    Uri destination = Uri.fromFile(new File(getCacheDir(), "cropped"));
                    CropUtil.saveOutput(Image.this, destination, croppedBitmap, 1);

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            dialog.dismiss();
                        }
                    });
                }
            }.start();
        }
    });

    buttonUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            uploadImage();
        }
    });
    buttonUpload1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            uploadImage1();
        }
    });

    pinButton1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            text_position.setVisibility(View.GONE);
            doneBtn.setVisibility(View.GONE);
            doneBtn1.setVisibility(View.GONE);
            cancelBtn.setVisibility(View.GONE);
            text_upload.setVisibility(View.GONE);
            buttonUpload.setVisibility(View.GONE);
            buttonUpload1.setVisibility(View.GONE);
            cropView.setVisibility(View.GONE);
            toolbar1.setVisibility(View.GONE);
            toolbar.setVisibility(View.VISIBLE);
            resultIv1.setVisibility(View.VISIBLE);
            resultIv.setVisibility(View.GONE);
            text_size.setVisibility(View.VISIBLE);
            PassImageBtn.setVisibility(View.VISIBLE);
            StampImageBtn.setVisibility(View.VISIBLE);

        }
    });

    pinButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            setResult(2, intent);
            finish();
        }
    });

    cancelBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent();
            setResult(2, intent);
            finish();
        }
    });
}//end

private void uploadImage() {
    //Showing the progress dialog
    final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    //Disimissing the progress dialog
                    loading.dismiss();
                    Toast.makeText(Image.this, s, Toast.LENGTH_LONG).show();

                    resultIv.buildDrawingCache();
                    Intent intent = new Intent(Image.this, StudentDetails.class);
                    setResult(2, intent);
                    finish();

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    //Dismissing the progress dialog
                    loading.dismiss();
                    //Showing toast
                    Toast.makeText(Image.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            //Converting Bitmap to String
            String image = getStringImage(croppedBitmap);
            String auid_no = getIntent().getStringExtra("auid_num");
            String imei_no = getIntent().getStringExtra("imei_num");

            Map<String, String> params = new Hashtable<String, String>();
            //Adding parameters
            params.put(KEY_IMAGE, image);
            params.put(KEY_AUID, auid_no);
            params.put(KEY_IMEI, imei_no);

            return params;
        }
    };
    //Creating a Request Queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    //Adding request to the queue
    requestQueue.add(stringRequest);
}

private void uploadImage1() {
    //Showing the progress dialog
    final ProgressDialog loading = ProgressDialog.show(this, "Uploading...", "Please wait...", false, false);
    StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    //Disimissing the progress dialog
                    loading.dismiss();
                    Toast.makeText(Image.this, s, Toast.LENGTH_LONG).show();

                    resultIv.buildDrawingCache();
                    Intent intent = new Intent(Image.this, StudentDetails.class);

                    intent.putExtra("BitmapImage", croppedBitmap);
                    setResult(2, intent);
                    finish();

                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError volleyError) {
                    //Dismissing the progress dialog
                    loading.dismiss();
                    //Showing toast
                    Toast.makeText(Image.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
                }
            }) {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            //Converting Bitmap to String
            String image = getStringImage1(croppedBitmap);
            String auid_no = getIntent().getStringExtra("auid_num");
            String imei_no = getIntent().getStringExtra("imei_num");

            Map<String, String> params = new Hashtable<String, String>();
            //Adding parameters
            params.put(KEY_IMAGE, image);
            params.put(KEY_AUID, auid_no);
            params.put(KEY_IMEI, imei_no);

            return params;
        }
    };
    //Creating a Request Queue
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    //Adding request to the queue
    requestQueue.add(stringRequest);
}

public Uri getImageUri(Context inContext, Bitmap inImage) {
    String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    cursor.moveToFirst();
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
    return cursor.getString(idx);
}

public String getStringImage(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int width = 413;
    int height = 531;
    Bitmap bm = Bitmap.createScaledBitmap(bmp, width, height, false);
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    return encodedImage;
}

public String getStringImage1(Bitmap bmp) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int width = (int) 56.69;
    int height = (int) 70.87;
    Bitmap bm = Bitmap.createScaledBitmap(bmp, width, height, false);
    bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    return encodedImage;
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        Intent intent = new Intent();
        setResult(2, intent);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        finish();
    }
}

}

【问题讨论】:

    标签: android


    【解决方案1】:

    onActivityResult()中设置图像不要再次调用onResume。

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
            Bitmap imageData = null;
            if (resultCode == RESULT_OK) {
                imageData = (Bitmap) data.getExtras().get("data"); 
                // set image here 
                bmImage.setImageBitmap(imageData);
    
                //Intent i = new Intent(this, Image.class);
                //i.putExtra("name", imageData);         
                //startActivityForResult(i,3);
    
            } else if (resultCode == RESULT_CANCELED) {
                // User cancelled the image capture
            } else {
                // Image capture failed, advise user
            }
        } 
      else if (requestCode == 3) {
            onResume();
        }
    }
    

    【讨论】:

    • 我试过了。它正在显示捕获的图像。但我想显示正在上传到服务器的裁剪图像的结果。
    • 您添加的 Image 活动的不完整代码,您正在裁剪无法帮助的代码。 ....你在哪里种植?
    • 裁剪在其他类中,您想裁剪并在后台活动图像视图中显示结果对吗?
    • 我已经在我的 qtn 中添加了完整的代码..是的..我想裁剪并在第一个活动中显示结果。
    【解决方案2】:

    我们在我们的项目中做了同样的场景,我们使用第三方库来裁剪图像。裁剪图像后,我们将意图传递给先前的活动来处理裁剪。这是代码,

    if (resultCode == Activity.RESULT_OK) {
            Uri croppedUri = Crop.getOutput(result);
            File outPutFile = new File(croppedUri.getPath());
            mImagePath = outPutFile.getAbsolutePath();
            mCurrentPhotoPath = mImagePath;
            Point size = Utility.getDisplayPoint(mActivity);
            int width = size.x;
            int height = (width * 9) / 16;
            Logger.i("height", height + "");
            Logger.i("cropped path", outPutFile.getAbsolutePath() + "");
            changeBeamPosterDimension(height, width);
            setPic(mImagePath);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 2015-02-09
      • 2015-03-10
      • 2015-08-07
      • 2015-06-03
      • 1970-01-01
      相关资源
      最近更新 更多