0

In my app, the user can upload the image to the server, but in some devices such as phones of version (4.4.4. 5.0.1 and 5.1.1) or even for all devices when selecting the image from "gallery" the app crashes. But when I choose the option "photos" and select photo and upload it, it works normally, so how can fix this problem and can select the photo from gallery or any album without crashing also upload it without any problem?

Given below is the full code of uploading the image:

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;

}

}
Pravitha V
  • 3,308
  • 4
  • 33
  • 51
wisam
  • 57
  • 1
  • 12

1 Answers1

0

I think you missing to ask permission.Can you check this is useful for you?

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

        }
    });
New
  • 152
  • 1
  • 2
  • 12