0

im referring to this tutorial for cropping --> https://www.android-examples.com/android-image-cropping-example-tutorial-pick-gallery-camera/

it is placing the cropped image in imageview in edit profile activity on submitting it is showing success that updated successfully.. but on acccount activity it is not showing image on profilepic...

when debugged it is only showing this--> data:image/png;base64 but not with encoded string(AVDBJSV3jq..)

why convertostring is null and why is it not appending string after this data:image/png;base64

i dont know why is it null

need help thanks in advance

Following is my code

class EditProfile:AppCompatActivity (){
var bitmap: Bitmap? = null
var profile:ImageView?=null
var uri: Uri? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.editprofile)
    var mActionBarToolbar = findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbartable);
    setSupportActionBar(mActionBarToolbar);
    if (getSupportActionBar() != null){
        getSupportActionBar()?.setDisplayHomeAsUpEnabled(true);
        getSupportActionBar()?.setDisplayShowHomeEnabled(true);
        getSupportActionBar()?.setHomeAsUpIndicator(R.drawable.ic_keyboard_arrow_left_black_24dp);
        getSupportActionBar()?.setDisplayShowTitleEnabled(false);
    }
    val myCalendar: Calendar = Calendar.getInstance()

    val edittext1 = findViewById(R.id.dob) as EditText
    val date =
        OnDateSetListener { view, year, monthOfYear, dayOfMonth -> // TODO Auto-generated method stub
            myCalendar.set(Calendar.YEAR, year)
            myCalendar.set(Calendar.MONTH, monthOfYear)
            myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth)
            val myFormat = "dd-MM-yyyy" //In which you need put here
            val sdf = SimpleDateFormat(myFormat, Locale.US)
            edittext1.setText(sdf.format(myCalendar.getTime()))      }

    edittext1.setOnClickListener(object : View.OnClickListener {
        override fun onClick(v: View?) {
            DatePickerDialog(
                this@EditProfile, date, myCalendar
                    .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH),
                myCalendar.get(Calendar.DAY_OF_MONTH)
            ).show()
        }
    })
   val edit= edittext1.text
     profile = findViewById<View>(R.id.profilepic) as ImageView


    val token :String =SharedPrefManager.getInstance(applicationContext).user.access_token.toString()
    RetrofitClient.instance.fetchUser(token)
        .enqueue(object : Callback<My_account_base_response> {
            override fun onFailure(call: Call<My_account_base_response>, t: Throwable) {

                Log.d("res", "" + t)
            }

            override fun onResponse(
                call: Call<My_account_base_response>,
                response: Response<My_account_base_response>
            ) {
                var res = response

                if (res.body()?.status == 200) {

                    val retro: Myaccount_data = res.body()!!.data
                    val retro1: User_data = retro.user_data
                    Glide.with(applicationContext).load(retro1.profile_pic)
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .placeholder(R.drawable.ic_launcher_foreground)
                        .into(profile!!)
                } else {
                    try {
                        val jObjError =
                            JSONObject(response.errorBody()!!.string())
                        Toast.makeText(
                            applicationContext,
                            jObjError.getString("user_msg"),
                            Toast.LENGTH_LONG
                        ).show()
                    } catch (e: Exception) {
                        Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
                        Log.e("errorrr", e.message)
                    }
                }
            }
        })

    profile?.setOnClickListener(View.OnClickListener {

        val GalIntent = Intent(Intent.ACTION_PICK,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI)

        startActivityForResult(Intent.createChooser(GalIntent, "Select Image From Gallery"), 2)
    })
    editsubmit.setOnClickListener {

        val first_name = firstname.text.toString().trim()
        val last_name = lastname.text.toString().trim()

        val email = emailregister.text.toString().trim()
        val phone = phoneno.text.toString().trim()

        val profile ="data:image/png;base64,"+convertToString()!!
        val token: String =
            SharedPrefManager.getInstance(
                applicationContext
            ).user.access_token.toString()
        val first_name1 =
            RequestBody.create(MediaType.parse("text/plain"), first_name)
        val last_name1 =
            RequestBody.create(MediaType.parse("text/plain"), last_name)
        val email1 =
            RequestBody.create(MediaType.parse("text/plain"), email)
        val dob1 =
            RequestBody.create(MediaType.parse("text/plain"), edittext1.text.toString())
        val phone_no1 =
            RequestBody.create(MediaType.parse("text/plain"), phone)
        val profile_pic = RequestBody.create(
            MediaType.parse("text/plain"),
            profile
        )


        val intent = Intent(this, HomeActivity::class.java)
        intent.putExtra("BitmapImage", profile)
        val map: MutableMap<String, RequestBody> = HashMap()

        map.put("first_name", first_name1);
        map.put("last_name", last_name1);
        map.put("email", email1);
        map.put("dob", dob1);
        map.put("phone_no", phone_no1);
        map.put("profile_pic", profile_pic);
        val requestFile: RequestBody =
            RequestBody.create(MediaType.parse("image/jpeg"), profile)

        val body: MultipartBody.Part =
            MultipartBody.Part.createFormData("image", "image.jpg", requestFile)
        RetrofitClient.instance.useredit(token, map)
            .enqueue(object : Callback<LoginResponse> {
                override fun onFailure(call: Call<LoginResponse>, t: Throwable) {
                    Log.d("res", "" + t)
                }

                override fun onResponse(
                    call: Call<LoginResponse>,
                    response: Response<LoginResponse>
                ) {
                    var res = response
                    Log.d("response check ", "" + response.body()?.status.toString())
                    if (res.body()?.status == 200) {
                        Toast.makeText(
                            applicationContext,
                            res.body()?.message,
                            Toast.LENGTH_LONG
                        ).show()
                        Log.d("kjsfgxhufb", response.body()?.status.toString())
                    } else {
                        try {
                            val jObjError =
                                JSONObject(response.errorBody()!!.string())
                            Toast.makeText(
                                applicationContext,
                                jObjError.getString("message") + jObjError.getString("user_msg"),
                                Toast.LENGTH_LONG
                            ).show()
                        } catch (e: Exception) {
                            Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG)
                                .show()
                            Log.e("errorrr", e.message)
                        }
                    }

                }
            })
    }
}
private fun convertToString(): String? {
      val byteArrayOutputStream = ByteArrayOutputStream()
    bitmap?.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream)
    bitmap?.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream)

    val imgByte: ByteArray = byteArrayOutputStream.toByteArray()

    return android.util.Base64.encodeToString(imgByte, android.util.Base64.NO_WRAP)
}

override fun onActivityResult(
    requestCode: Int,
    resultCode: Int,
    data: Intent?
) {
    super.onActivityResult(requestCode, resultCode, data)

    if (requestCode === 0 && resultCode === RESULT_OK) {
        ImageCropFunction()
    } else if (requestCode === 2) {
        if (data != null) {
            uri = data.data
            ImageCropFunction()
        }
    } else if (requestCode === 1) {
        if (data != null) {
            val bundle = data.extras
            val bitmap = bundle!!.getParcelable<Bitmap>("data")
            profile?.setImageBitmap(bitmap)
        }
    }

}
fun ImageCropFunction() {
    try {
       val CropIntent = Intent("com.android.camera.action.CROP")
        CropIntent.setDataAndType(uri, "image/*")
        CropIntent.putExtra("crop", "true")
        CropIntent.putExtra("outputX", 180)
        CropIntent.putExtra("outputY", 180)
        CropIntent.putExtra("aspectX", 3)
        CropIntent.putExtra("aspectY", 4)
        CropIntent.putExtra("scaleUpIfNeeded", true)
        CropIntent.putExtra("return-data", true)
        startActivityForResult(CropIntent, 1)
    } catch (e: ActivityNotFoundException) {
    }
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        android.R.id.home -> {
            NavUtils.navigateUpFromSameTask(this)

            true
        }
        else -> super.onOptionsItemSelected(item)
    }
}
   }
android dev
  • 200
  • 5
  • 18

1 Answers1

1

You've put bitmap into new variable. You've to put that into global variable.

bitmap = bundle!!.getParcelable<Bitmap>("data") profile?.setImageBitmap(bitmap)

Just remove val before bitmap where you're trying to set new bitmap image into the variable.

shafayat hossain
  • 1,089
  • 1
  • 8
  • 13
  • new question --> need help here --> https://stackoverflow.com/questions/64371863/onresume-does-not-worked-in-viewmodel – android dev Oct 15 '20 at 14:02