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