Solution 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.
Problem :
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(
[email protected], 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)
}
}
}
Comments
Comment posted by EpicPandaForce
No idea, but I’d try sending up image directly via OkHttpClient and not necessarily through Retrofit. that helped me once
Comment posted by apj123
@EpicPandaForce thanks for reverting…but i dont think it is due to network call…because it is line failed to encode the image ==>
Comment posted by shafayat hossain
In
Comment posted by apj123
here –> var bitmap: Bitmap? = null @shafayathossain
Comment posted by shafayat hossain
And where did you put bitmap value?
Comment posted by stackoverflow.com/questions/64371863/…
new question –> need help here –>