0

は、私は次のためにFirebaseのドキュメントを見、同様のstackoverflow、グーグル、そしてYouTubeで検索されているとユーザー登録:アンドロイドFirebase - プロフィール写真

電子メール、パスワードの入力を可能にユーザー登録を作成し、プロフィール写真。

電子メールとパスワードを使用してユーザーを追加することはできますが、他の情報(最も重要なのはプロフィール写真)を取得できないようです。すべてのチュートリアルとドキュメンテーションは、誰かが(ログインした)ユーザーがどのようにfirebaseに写真をアップロードすることができるかを示していますが、登録している人の写真は表示されません。誰かがここで助けてもらえますか?新しいユーザーとアップロードしたプロフィール写真と名字はどうやって手に入れられますか?

私はFirebaseAuthを使用してユーザーを追加しています。

これは私がこれまで持っているものです。

checkmarkImage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


     auth.createUserWithEmailAndPassword(emailET.getText().toString(), passwordET.getText().toString()) 
      .addOnCompleteListener(RegisterActivity.this, new OnCompleteListener() { 
          @Override 
          public void onComplete(@NonNull Task task) { 
             Toast.makeText(RegisterActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
              //progressBar.setVisibility(View.GONE); 
           if (!task.isSuccessful()) { 
               Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), 
                 Toast.LENGTH_SHORT).show(); 
           } else { 
             startActivity(new Intent(RegisterActivity.this, HomeActivity.class)); 
             finish(); 
              } 
              } 
            }); 
         } 
        }); 

     uploadProfilePhoto.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       handleChooseImage(view); 
      } 
     }); 


    } 

    //END OF onCreate 

    //Separate methods 

    //Actually opens the CameraRoll 
     public void handleChooseImage(View v) { 
      Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, SELECTED_PICTURE); //then goes to onActivityResult 
     } 
     public void handleInsertData(View v) { 

     } 

    public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     switch (requestCode) { 
      case 0: 
       if(requestCode == RESULT_OK) { 
        Log.i("RegisterActivity", "case 0"); 
       } 
       break; 
      case 1: 
       if(resultCode == RESULT_OK) { 
        Uri selectedImage = imageReturnedIntent.getData(); 
        Log.i("RegisterActivity", "selected image = " + selectedImage); 

       } 
       break; 
     } 
    } 
} 

答えて

0

あなたが最初にサインアップしてから、これは標準的な方法であるストレージにユーザ画像をアップロードする必要があります。

はfirebaseストレージデフォルトルール user != nullあたりのようにユーザーの認証状態nullまたは他のあなたは(それが好ましくないのです)

公衆にfirebaseルールを変更することができない私は、これはあなたを助けることを願っていなければならないからです。

auth.createUserWithEmailAndPassword(email, password) 
         .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
            if (!task.isSuccessful()) { 
            aDialog.show(); 
           } else { 
            final String uid = task.getResult().getUser().getUid(); 

            StorageReference filepath = mStorage.child("user_profile").child(mImageUri.getLastPathSegment()); 
            filepath.putFile(mImageUri).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 
              double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 
              if (progress == 100) { 
               hideProgressDialog(); 
               //upload(); 
              } 
              System.out.println("Upload is " + progress + "% done"); 
             } 
            }).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onPaused(UploadTask.TaskSnapshot taskSnapshot) { 
              System.out.println("Upload is paused"); 
             } 
            }).addOnFailureListener(new OnFailureListener() { 
             @Override 
             public void onFailure(@NonNull Exception exception) { 
              // Handle unsuccessful uploads 
             } 
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
              /** Get Image Download Path**/ 
              Uri downloadUri = taskSnapshot.getDownloadUrl(); 

              /** Converting Image Uri In String **/ 

              if (downloadUri != null) { 
               imagerls = downloadUri.toString(); 
              } 

              //Add user data and image URL to firebase database 
             } 

            }); 
           } 
          } 
         }); 
あなたはfirebaseにかかわらず、利用者の登録画像をアップロードすることができ
+0

新しいアカウントを登録している間にイメージをアップロードできないと言っていますか?ユーザーが既にデータベースに入っていて、更新に行くと、もしそうなら、あなたの上記のコードは何ですか?ありがとう –

+0

もちろん、あなたの画像をアップロードすることができますホワイトユーザーの登録が、あなたの登録を完了してから、まずあなたの-onSuccessListner-アップロード画像、Ones画像アップロード、画像URL取得、そして新しくアップロードされた画像URL私のコードは私のために同じ仕事をしました。 –

+0

私はあなたがそのユーザーオブジェクトを取得し、そのユーザーID(Firebaseストレージからのユーザープロファイルイメージのための一意のリンクを持つ)を持つfirebaseストレージにイメージをアップロードすることにより、ユーザーオブジェクトを更新することによって、それでおしまい。 –

0

は、 しかし、あなたは再びそれを得るために画像を保存するために、ユーザの参照を必要とするユーザーがサインイン時に、あなたがすることはできませんユーザーがまだ登録されていない場合は、そのユーザーの参照を保持します。 は意味がありますか? :)

+0

これは別のアクティビティ/ Javaファイルで行う必要があることを意味しますか?私はそうだと思いますが、なぜユーザー名とパスワードが登録時に参照を持たないものに関連付けられるのですか? –

+0

1:同じアクティビティの電子メールIDに対して登録成功リスナーの画像をアップロードできます。または 2:FirebaseAuth.getInstance()。getCurrentUser()を登録してログインし、現在のユーザーを取得して保存します主な活動のイメージ、これは私が示唆しているものです。 もちろん、電子メール、パス、ユーザーのディスプレイへのパスもデータベースに保存します。 希望します。 – Numanqmr

関連する問題