ありがとうございます。私はMyAccountActivityで作業していたところで、ユーザーは自分のプロフィール画像を変更することができます。私がここでやっていることは、切り抜きイメージがonActivityResult()メソッドで実行されると、プログラムは現在のユーザーのイメージ値を変更するということです。イメージ値が変更されると、onValueEventListenerをonCreate()メソッドで再度呼び出して、その値を読み込み、addValueEventListenerで行ったようにそのイメージのURLまたは文字列をPicassoに格納します。しかし、アプリケーションはトリミング後自動的に私にサインします。Android Firebase - 子データの変更後に自動的にログアウトしました
mImageUrlを印刷すると、画像が正常に切り取られたときに値が変更されたことがわかりましたが、2番目の後に前の画像に戻ってきてからログアウトしました。
誰でも私にこれを助けることができますか?ありがとうございました。
MyProfileActivity.java Firebaseリアルタイムデータベースのための
public class MyProfileActivity extends AppCompatActivity
{
/*UI*/
private Toolbar mMyProfileToolbar;
private TextView mAge;
private TextView mGender;
private TextView mReligion;
private TextView mSports;
private TextView mState;
private TextView mTimeRegistered;
private TextView mDisplayName;
private CircleImageView mProfileImage;
/*Firebase*/
private DatabaseReference mDatabaseUser;
private FirebaseUser mUser;
private StorageReference mStorage;
private DatabaseReference mDatabasePost;
private StorageReference filepath;
private DatabaseReference user_db;
/*Other*/
private String age;
private String gender;
private String religion;
private String sports;
private String state;
private String timeRegistered;
private String displayName;
private Uri mImageUri = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_profile);
/*UI*/
mMyProfileToolbar = (Toolbar)findViewById(R.id.activity_my_profile_toolbar);
mProfileImage = (CircleImageView)findViewById(R.id.activity_my_profile_profile_image);
mDisplayName = (TextView)findViewById(R.id.activity_my_profile_display_name);
mAge = (TextView)findViewById(R.id.activity_my_profile_age);
mGender = (TextView)findViewById(R.id.activity_my_profile_gender);
mReligion = (TextView)findViewById(R.id.activity_my_profile_religion);
mSports = (TextView)findViewById(R.id.activity_my_profile_sports);
mState = (TextView)findViewById(R.id.activity_my_profile_state);
mTimeRegistered = (TextView)findViewById(R.id.activity_my_profile_time_registered);
/*Firebase*/
mDatabaseUser = FirebaseDatabase.getInstance().getReference().child("User");
mUser = FirebaseAuth.getInstance().getCurrentUser();
mStorage = FirebaseStorage.getInstance().getReference();
/*Function*/
setSupportActionBar(mMyProfileToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(null);
mDatabaseUser.child(mUser.getUid()).addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot dataSnapshot)
{
System.out.println("TestUp------------------------------------at addValueEventListener");
displayName = dataSnapshot.child("displayName").getValue().toString();
age = dataSnapshot.child("age").getValue().toString();
gender = dataSnapshot.child("gender").getValue().toString();
religion = dataSnapshot.child("religion").getValue().toString();
sports = dataSnapshot.child("sports").getValue().toString();
state = dataSnapshot.child("state").getValue().toString();
timeRegistered = dataSnapshot.child("timeRegistered").getValue().toString();
mImageUri = Uri.parse(dataSnapshot.child("image").getValue().toString());
System.out.println("TestUp------------------------------------mImageUri: " + mImageUri);
Picasso.with(MyProfileActivity.this).load(mImageUri).into(mProfileImage);
mDisplayName.setText(displayName);
mAge.setText("Age: " + age);
mGender.setText("Gender: " + gender);
mReligion.setText("Religion: " + religion);
mSports.setText("Sports: " + sports);
mState.setText("State: " + state);
mTimeRegistered.setText("Time Registered: " + timeRegistered);
}
@Override
public void onCancelled(DatabaseError databaseError)
{
}
});
mProfileImage.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("image/*");
startActivityForResult(i, 1);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK)
{
mImageUri = data.getData();
CropImage.activity(mImageUri)
.setGuidelines(CropImageView.Guidelines.OFF)
.setAspectRatio(1, 1)
.start(this);
}
if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if(resultCode == RESULT_OK)
{
mImageUri = result.getUri();
DatabaseReference user_db = mDatabaseUser.child(mUser.getUid());
user_db.child("image").setValue(mImageUri.toString());
System.out.println("TestDown------------------------------------user_db: " + user_db);
System.out.println("TestDown------------------------------------mImageUri: " + mImageUri);
}
else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE)
{
System.out.println("Test9------------------------------------");
Toast.makeText(MyProfileActivity.this, "ERROR", Toast.LENGTH_SHORT).show();
Exception error = result.getError();
System.out.println("Test10------------------------------------");
}
}
}
}
ルール
{
"rules": {
// User profiles are only readable/writable by the user who owns it
".read": true,
".write": true,
"users": {
"$UID": {
".read": "auth.uid == $UID",
".write": "auth.uid == $UID"
}
},
// Posts can be read by anyone but only written by logged-in users.
"posts": {
".read": true,
".write": "auth.uid != null",
"$POSTID": {
// UID must matched logged in user and is fixed once set
"uid": {
".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
},
// User can only update own stars
"stars": {
"$UID": {
".validate": "auth.uid == $UID"
}
}
}
},
// User posts can be read by anyone but only written by the user that owns it,
// and with a matching UID
"user-posts": {
".read": true,
"$UID": {
"$POSTID": {
".write": "auth.uid == $UID",
".validate": "data.exists() || newData.child('uid').val() == auth.uid"
}
}
},
// Comments can be read by anyone but only written by a logged in user
"post-comments": {
".read": true,
".write": "auth.uid != null",
"$POSTID": {
"$COMMENTID": {
// UID must matched logged in user and is fixed once set
"uid": {
".validate": "(data.exists() && data.val() == newData.val()) || newData.val() == auth.uid"
}
}
}
}
}
}
は、それはまだ私がuser_db.child( "イメージ")をコメントアウトするとき.. – Eric
私をサインアウトのsetValue(mImageUri.toString());それは私に署名しません。私はuser_db.child( "イメージ")に問題があると思う。setValue(mImageUri.toString()); – Eric
設定値のコードに問題はありません。問題は、あなたのmDatabaseUser.child(mUser.getUid())にリスナーがあり、何かを変更すると、リスナーがトリガーされます。したがって、リスナーとaddListenerForSingleValueEventが機能するはずです。 mDatabaseUser.child(mUser.getUid())に他のアクティブなリスナーがありますか? – kagkar