我正在构建一个应用程序,用户可以通过点击图片按钮上传本地存储在设备中的照片。我正在使用firebase存储将照片存储在一个文件夹中。当我点击图片选择器按钮时,它会打开我的图库来选择照片,但是当我选择一张照片时,它永远不会在应用程序中显示在firebase控制台存储中。这是我的代码
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mUsername = ANONYMOUS;
mFirebaseDatabase=FirebaseDatabase.getInstance();
mFirebaseAuth=FirebaseAuth.getInstance();
mMessagesDatabaseReference=mFirebaseDatabase.getReference().child("messages");
mFirebaseStorage=FirebaseStorage.getInstance();
mChatPhotoStorageReference=mFirebaseStorage.getReference().child("chat_photos");
mFirebaseRemoteConfig=FirebaseRemoteConfig.getInstance();
// Initialize references to views
mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
mMessageListView = (ListView) findViewById(R.id.messageListView);
mPhotoPickerButton = (ImageButton) findViewById(R.id.photoPickerButton);
mMessageEditText = (EditText) findViewById(R.id.messageEditText);
mSendButton = (Button) findViewById(R.id.sendButton);
// Initialize message ListView and its adapter
final List<FriendlyMessage> friendlyMessages = new ArrayList<>();
mMessageAdapter = new MessageAdapter(this, R.layout.item_message, friendlyMessages);
mMessageListView.setAdapter(mMessageAdapter);
// Initialize progress bar
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
// ImagePickerButton shows an image picker to upload a image for a message
mPhotoPickerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO: Fire an intent to show an image picker
Intent intent=new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true);
startActivityForResult(Intent.createChooser(intent,"complete action using"),RC_PHOTO_PICKER);
}
});
// Enable Send button when there's text to send
mMessageEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.toString().trim().length() > 0) {
mSendButton.setEnabled(true);
} else {
mSendButton.setEnabled(false);
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
mMessageEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(DEFAULT_MSG_LENGTH_LIMIT)});
// Send button sends a message and clears the EditText
mSendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// TODO: Send messages on click
// Clear input box
FriendlyMessage friendlyMessage=new FriendlyMessage(mMessageEditText.getText().toString(),mUsername,null);
mMessagesDatabaseReference.push().setValue(friendlyMessage);
mMessageEditText.setText("");
}
});
mAuthStateListener=new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
FirebaseUser user=firebaseAuth.getCurrentUser();
if(user!=null)
{
onSignedInInitialize(user.getDisplayName());
Toast.makeText(MainActivity.this,"You are signed in to friendly chat app",Toast.LENGTH_SHORT).show();
}
else
{onSignedOutCleanup();
startActivityForResult(
AuthUI.getInstance()
.createSignInIntentBuilder()
.setAvailableProviders(
Arrays.asList(new AuthUI.IdpConfig.Builder(AuthUI.EMAIL_PROVIDER).build(),
new AuthUI.IdpConfig.Builder(AuthUI.GOOGLE_PROVIDER).build()
))
.build(),
RC_SIGN_IN);
}
}
};
FirebaseRemoteConfigSettings configSettings=new FirebaseRemoteConfigSettings.Builder()
.setDeveloperModeEnabled(BuildConfig.DEBUG)
.build();
mFirebaseRemoteConfig.setConfigSettings(configSettings);
Map<String,Object> defaultConfigMap=new HashMap<>();
defaultConfigMap.put(FRIENDLY_MSG_LENGTH_kEY,DEFAULT_MSG_LENGTH_LIMIT);
mFirebaseRemoteConfig.setDefaults(defaultConfigMap);
fetchConfig();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(resultCode==RC_SIGN_IN)
{
if(resultCode==RESULT_OK)
{
Toast.makeText(MainActivity.this,"Signed In",Toast.LENGTH_SHORT).show();
}
else if(resultCode==RESULT_CANCELED)
{
Toast.makeText(MainActivity.this,"Sign IN Cancelled",Toast.LENGTH_SHORT).show();
finish();
}
}
else if(resultCode==RC_PHOTO_PICKER&&resultCode==RESULT_OK)
{
Uri selectedImageUri=data.getData();
StorageReference photoRef=mChatPhotoStorageReference.child(selectedImageUri.getLastPathSegment());
photoRef.putFile(selectedImageUri).addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Uri downloadUrl=taskSnapshot.getDownloadUrl();
FriendlyMessage friendlyMessage=new FriendlyMessage(null,mUsername,downloadUrl.toString());
mMessagesDatabaseReference.push().setValue(friendlyMessage);
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId())
{
case R.id.sign_out_menu:
AuthUI.getInstance().signOut(this);
return true;
default:
return super.onOptionsItemSelected(item);}
}
public void onPause() {
super.onPause();
if (mAuthStateListener != null) {
mFirebaseAuth.removeAuthStateListener(mAuthStateListener);
}
detachDatabaseReadListener();
mMessageAdapter.clear();
}
public void onResume()
{
super.onResume();
mFirebaseAuth.addAuthStateListener(mAuthStateListener);
}
private void onSignedInInitialize(String username)
{
mUsername=username;
attachDatabaseReadListener();
}
private void onSignedOutCleanup()
{
mUsername=ANONYMOUS;
mMessageAdapter.clear();
detachDatabaseReadListener();
}
private void attachDatabaseReadListener() {
if (mChildEventListener == null) {
mChildEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
FriendlyMessage friendlyMessage = dataSnapshot.getValue(FriendlyMessage.class);
mMessageAdapter.add(friendlyMessage);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mMessagesDatabaseReference.addChildEventListener(mChildEventListener);
}
}
private void detachDatabaseReadListener()
{
if(mChildEventListener!=null)
{
mMessagesDatabaseReference.removeEventListener(mChildEventListener);
mChildEventListener=null;
}}
private void fetchConfig()
{
long cacheExpiration=3600;
if(mFirebaseRemoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{
cacheExpiration=0;
}
mFirebaseRemoteConfig.fetch(cacheExpiration)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mFirebaseRemoteConfig.activateFetched();
applyRetrievedLengthLimit();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG,"Error fetching code",e);
applyRetrievedLengthLimit();
}
});
}
private void applyRetrievedLengthLimit() {
Long friendly_msg_length = mFirebaseRemoteConfig.getLong(FRIENDLY_MSG_LENGTH_kEY);
mMessageEditText.setFilters(new InputFilter[]{
new InputFilter.LengthFilter(friendly_msg_length.intValue())
});
Log.d(TAG,FRIENDLY_MSG_LENGTH_kEY + "=" +friendly_msg_length);
}
}