从图库中选择要上传的照片时,应用会崩溃

时间:2017-08-03 11:50:40

标签: android crash android-volley image-uploading

在我的应用程序中,用户可以将图像上传到服务器,但在某些设备上,例如版本(4.4.4.5.0.1和5.1.1)的手机,或者甚至从选择图像的所有设备上传画廊“该应用程序崩溃。但是,当我选择“照片”选项并选择照片并上传时,它可以正常工作,那么如何解决这个问题并可以从画廊或任何相册中选择照片而不会崩溃也可以毫无问题地上传它?

以下是上传图片的完整代码:

public class send extends AppCompatActivity {
private Button buttonChoose;
private Button buttonUpload;

private ImageView imageView;

private EditText editTextName;
private EditText editTextPhone;
private EditText editTextText;
private Bitmap bitmap;

private int PICK_IMAGE_REQUEST = 1;
private static String host=PathConfig.hostName;
private String UPLOAD_URL ="http://"+host+"/upload.php";

private String KEY_IMAGE = "image";
private String KEY_NAME = "name";
private String KEY_PHONE = "phone";
private String KEY_TEXT = "text";
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_send);

    setSupportActionBar(toolbar);
    getSupportActionBar().setHomeAsUpIndicator(R.drawable.arrowb);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); // setting the back arrow in the toolbar
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    setTitle("إرسال شكوى أو إقتراح");

    buttonChoose = (Button) findViewById(R.id.chooseButton);
    buttonUpload = (Button) findViewById(R.id.sendButton);

    editTextName = (EditText) findViewById(R.id.name);
    editTextPhone= (EditText) findViewById(R.id.phone);
    editTextText= (EditText) findViewById(R.id.text);
    imageView  = (ImageView) findViewById(R.id.imageView4);


    buttonChoose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showFileChooser();
        }
    });
    buttonUpload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            uploadImage();
        }
    });

}
public String getStringImage(Bitmap bmp){
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    if(bmp!=null){
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    }
    byte[] imageBytes = baos.toByteArray();
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
    return encodedImage;
}

private void uploadImage() {
    final String name = editTextName.getText().toString().trim();
    final  String phone = editTextPhone.getText().toString().trim();
    final String text = editTextText.getText().toString().trim();

    if (name.matches("") || phone.matches("") || text.matches("")) {
        Toast.makeText(this, " عذرا, لا يمكن ترك حقول فارغة", Toast.LENGTH_SHORT).show();

    } else {
        //Showing the progress dialog
        final ProgressDialog loading = ProgressDialog.show(this, "جاري الإرسال...", "الرجاء الإنتظار...", 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();
                        //Showing toast message of the response
                        Toast.makeText(send.this, s, Toast.LENGTH_LONG).show();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError volleyError) {
                        //Dismissing the progress dialog
                        loading.dismiss();

                        //Showing toast
                        Toast.makeText(send.this, volleyError.getMessage().toString(), Toast.LENGTH_LONG).show();
                    }
                }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Converting Bitmap to String
                String image = getStringImage(bitmap);

                //Getting Image Name


                //Creating parameters
                Map<String, String> params = new HashMap<String, String>();

                //Adding parameters
                params.put(KEY_IMAGE, image);
                params.put(KEY_NAME, name);
                params.put(KEY_PHONE, phone);
                params.put(KEY_TEXT, text);

                //returning parameters
                return params;
            }
        };

        //Creating a Request Queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);

        //Adding request to the queue
        requestQueue.add(stringRequest);
    }
}
private void showFileChooser() {
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
        Uri filePath = data.getData();
        try {
            //Getting the Bitmap from Gallery
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            //Setting the Bitmap to ImageView
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;

}

}

1 个答案:

答案 0 :(得分:0)

我想你错过了许可。可以检查一下这对你有用吗?

   profile_img.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (Build.VERSION.SDK_INT >= 23) {
                // Marshmallow+
                if (!checkAccessFineLocationPermission() || !checkAccessCoarseLocationPermission() || !checkWriteExternalStoragePermission()) {
                    requestPermission();
                } else {
                    selectImage();
                }
            }else{
                selectImage();
            }

        }
    });