Я разрабатываю приложение, которое загружает изображение в firebase. При загрузке нажатием кнопки «опубликовать» возникает ошибка - Прервать из-за нарушения ограничения. (Ошибка ограничения UNIQUE: pending_ops.tag, pending_ops.target_class, pending_ops.target_package, pending_ops.user_id (код 2067)).
Ниже приведен мой код для класса java:
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.Fragment;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.OnProgressListener;
import com.google.firebase.storage.StorageReference;
import com.google.firebase.storage.UploadTask;
import java.io.IOException;
import java.util.Objects;
import java.util.UUID;
import static android.app.Activity.RESULT_OK;
public class TwoFragment extends Fragment {
private static final int PICK_IMAGE_REQUEST = 234;
private StorageReference mStorageRef;
private EditText story;
private Button btnSelect, btnUpload;
private Uri filePath;
private ImageView imageView;
public TwoFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_two, container, false);
View rootView = inflater.inflate(R.layout.fragment_two, container, false);
mStorageRef = FirebaseStorage.getInstance().getReference();
story = (EditText) rootView.findViewById(R.id.editText);
btnSelect = (Button) rootView.findViewById(R.id.button_photos);
btnUpload = (Button) rootView.findViewById(R.id.button_post);
imageView = (ImageView) rootView.findViewById(R.id.imgView);
btnSelect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
});
btnUpload.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (filePath != null) {
final ProgressDialog progressDialog = new ProgressDialog(getContext());
progressDialog.setTitle("Uploading");
progressDialog.show();
StorageReference mStorageRef = FirebaseStorage.getInstance().getReferenceFromUrl("gs://myapp.appspot.com");
mStorageRef.putFile(filePath)
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
progressDialog.dismiss();
Toast.makeText(getContext(), "Story posted", Toast.LENGTH_SHORT);
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(getContext(), "Story couldn't be posted", Toast.LENGTH_SHORT);
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
//calculating progress percentage
double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
//displaying percentage in progress dialog
progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
}
});
}
}
});
return rootView;
}
@Override
public 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) {
filePath = data.getData();
try {
// Setting image on image view using Bitmap
Bitmap bitmap = MediaStore
.Images
.Media
.getBitmap(
Objects.requireNonNull(getActivity()).getContentResolver(),
filePath);
imageView.setImageBitmap(bitmap);
} catch (IOException e) {
// Log the exception
e.printStackTrace();
}
}
}
}
Также, пожалуйста, предложите, как загрузить изображение под конкретным c пользователем. Я имею в виду, что загрузка должна производиться только для пользователя, вошедшего в систему.