, поэтому я создаю приложение для чата, и мои фотографии не отображаются, теперь я использую Picasso и android studio. При комментировании кода, где предполагается, что картинки go все работает, но если я оставляю код там, я получаю эту ошибку java .lang.BootstrapMethodError: Исключение из метода вызова сайта # 4 bootstrap, и приложение вылетает , Я также подключен к хранилищу FireBase. LogCat здесь
java.lang.BootstrapMethodError: Exception from call site #4 bootstrap method
at okhttp3.internal.Util.<clinit>(Util.java:87)
at okhttp3.internal.Util.immutableList(Util.java:234)
at okhttp3.OkHttpClient.<clinit>(OkHttpClient.java:124)
at okhttp3.OkHttpClient$Builder.<init>(OkHttpClient.java:449)
at com.squareup.picasso.OkHttp3Downloader.<init>(OkHttp3Downloader.java:71)
at com.squareup.picasso.OkHttp3Downloader.<init>(OkHttp3Downloader.java:50)
at com.squareup.picasso.OkHttp3Downloader.<init>(OkHttp3Downloader.java:40)
at com.squareup.picasso.Picasso$Builder.build(Picasso.java:848)
at com.squareup.picasso.Picasso.get(Picasso.java:683)
at com.example.room.ProfileFragment$1.onDataChange(ProfileFragment.java:146)
avatarIv = view.findViewById(R.id.avatarIv);
nameTv = view.findViewById(R.id.nameTv);
emailTv =view.findViewById(R.id.emailTv);
phoneTv = view.findViewById(R.id.phoneTv);
coverIv = view.findViewById(R.id.coverIv);
fab = view.findViewById(R.id.fab);
Query query = databaseReference.orderByChild("email").equalTo(user.getEmail());
query.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
// until required data get
for (DataSnapshot ds : dataSnapshot.getChildren()){
//get data
String name = "" + ds.child("name").getValue();
String email = "" + ds.child("email").getValue();
String phone = "" + ds.child("phone").getValue();
String image = "" + ds.child("image").getValue();
String cover = "" + ds.child("cover").getValue();
//set data
nameTv.setText(name);
emailTv.setText(email);
phoneTv.setText(phone);
try {
Picasso.get().load(image).into(avatarIv);
}
catch (Exception e){
Picasso.get().load(R.drawable.ic_default_img_white).into(avatarIv);
}
try {
Picasso.get().load(cover).into(coverIv);
}
catch (Exception e){
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
private void showEditProfileDialog() {
/* show dialog containg options
edit profile
cover photo
name
phone
* */
//options to show in dialog
String options [] = {"Edit Profile Picture ", "Edit Cover Photo ", "Edit Name ", "Edit Phone"};
// alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Choose Action");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if(which==0){
profileorCoverPhoto = "image";
showImagePicDialog();
}else if (which==1){
// Edit cover click
profileorCoverPhoto = "cover";
showImagePicDialog();
}else if (which==2){
// Edit name click
showNamePhoneUpdateDialog("name");
}else if (which==3){
// Edit Phone click
showNamePhoneUpdateDialog("phone");
}
}
});
builder.create().show();
}
private void showImagePicDialog() {
String options [] = {"Camera", "Gallery"};
// alert dialog
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Pick Image From ");
builder.setItems(options, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (which == 0) {
// camera clicked
if(!checkCameraPermission()){
reqCameraPermission();
}
else {
pickFromCamera();
}
showImagePicDialog();
} else if (which == 1) {
// Gallery cliked
if (!checkStoragePermission()){
reqStoragePermission();
}
else {
pickFromGallery();
}
}
}
});
builder.create().show();
}
private void showNamePhoneUpdateDialog(final String key) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Update" + key);
LinearLayout linearLayout =new LinearLayout(getActivity());
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setPadding(10,10,10,10);
final EditText editText= new EditText(getActivity());
editText.setHint("Enter" + key);
linearLayout.addView(editText);
builder.setView(linearLayout);
builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//input text
String value = editText.getText().toString().trim();
if (!TextUtils.isEmpty(value)){
HashMap<String, Object> result = new HashMap<>();
result.put(key, value);
databaseReference.child(user.getUid()).updateChildren(result)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "Updated", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "" +e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
else {
Toast.makeText(getActivity(), "please enter "+key, Toast.LENGTH_SHORT).show();
}
}
});
//add button to cancel
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode){
case CAMERA_REQUEST_CODE:{
if (grantResults.length>0){
boolean cameraAccepted = grantResults[0]== PackageManager.PERMISSION_GRANTED;
boolean writeStorageAccepted = grantResults[1]== PackageManager.PERMISSION_GRANTED;
if(cameraAccepted && writeStorageAccepted){
pickFromCamera();
}
else {
Toast.makeText(getActivity(), "Please enable camera & storage permission ", Toast.LENGTH_SHORT).show();
}
}
}
break;
case STORAGE_REQUEST_CODE:{
if (grantResults.length>0){
boolean writeStorageAccepted = grantResults[1]== PackageManager.PERMISSION_GRANTED;
if(writeStorageAccepted){
pickFromGallery();
}
else {
Toast.makeText(getActivity(), "", Toast.LENGTH_SHORT).show();
}
}
}
break;
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
//this method will be called after picking image from cam or gallery
if (resultCode== RESULT_OK){
if (requestCode == IMAGE_PICK_GALLERY_CODE){
image_uri = data.getData();
uploadProfileCoverPhoto(image_uri);
}
if (requestCode == IMAGE_PICK_CAMERA_CODE) {
uploadProfileCoverPhoto(image_uri);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
private void uploadProfileCoverPhoto(final Uri uri){
String filePathAndName = storagePath+ ""+ profileorCoverPhoto + "_" + user.getUid();
StorageReference storageReference2nd = storageReference.child(filePathAndName);
storageReference2nd.putFile(uri)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> uriTask= taskSnapshot.getStorage().getDownloadUrl();
while (!uriTask.isSuccessful());
Uri downloadUri = uriTask.getResult();
// check if image is uploaded or not
if (uriTask.isSuccessful()){
HashMap<String,Object> results = new HashMap<>();
results.put(profileorCoverPhoto,downloadUri.toString());
databaseReference.child(user.getUid()).updateChildren(results)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(getActivity(), "Image Updated", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), "Error updating Image", Toast.LENGTH_SHORT).show();
}
});
} else {
Toast.makeText(getActivity(), "some error occured", Toast.LENGTH_SHORT).show();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
private void pickFromCamera() {
//intent of picking image from device
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, "Temp Pic");
values.put(MediaStore.Images.Media.DESCRIPTION, "Temp Description");
image_uri = getActivity().getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
// intet to start camera
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri);
startActivityForResult(cameraIntent, IMAGE_PICK_CAMERA_CODE);
}
private void pickFromGallery() {
Intent galleryIntent= new Intent(Intent.ACTION_PICK);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent,IMAGE_PICK_GALLERY_CODE);
}
}