【问题标题】:Cant write to Database Firebase无法写入数据库 Firebase
【发布时间】:2018-04-26 16:41:53
【问题描述】:
mDatabse = FirebaseDatabase.getInstance().getReference().child("Users");

HashMap<String, String> usermMap = new HashMap<>();
usermMap.put("name", display_name);
usermMap.put("status", "Hey, ich benutze die App.");
usermMap.put("image", "default_pic");
usermMap.put("thumb_image", "default_pic");

mDatabse.setValue(usermMap);

它只注册此帐户,但不创建数据库数据。

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "de.epix_crew.epixchat"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    //implementation 'com.android.support:design-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.google.firebase:firebase-auth:15.0.0'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.google.firebase:firebase-database:15.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:design:27.1.1'
    implementation 'de.hdodenhof:circleimageview:2.2.0'


}

apply plugin: 'com.google.gms.google-services'

这是这个文件,希望你能帮助我让它工作。 也许如果你有 Teamviewer 你可以看到问题:)

也谢谢:)

【问题讨论】:

  • 你检查权限了吗?请解释您的问题!
  • 我在 Youtube 上遵循教程,现在他不将我的数据写入数据库。
  • 代码如下:pastebin.com/5GZtT7xF
  • 如果即使设置了权限也不能工作,是不是代码执行进入了if (task.isSuccessful())
  • 你是什么意思?对不起,我的英语不太好^^

标签: android firebase


【解决方案1】:
if (task.isSuccessful()) {

                FirebaseUser current_user = FirebaseAuth.getInstance().getCurrentUser();
                String uid = current_user.getUid();

                Log.d("Inside if task successful",".......");
                // added a log to check if excecution gets inside the if block
                mDatabse = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);

                HashMap<String, String> usermMap = new HashMap<>();
                usermMap.put("name", display_name);
                usermMap.put("status", "Hey, ich benutze die - App.");
                usermMap.put("image", "default_pic");
                usermMap.put("thumb_image", "default_pic");

                mDatabse.setValue(usermMap);



                /*
                mRegProgress.dismiss();

                Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
                mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                startActivity(mainIntent);
                finish();

                */

            } else {
                mRegProgress.hide();
                Toast.makeText(RegisterActivity.this, "Fehler! Überbrüfe noch einmal die Eingabefelder!", Toast.LENGTH_LONG).show();
            }

在 if 块中添加了一个日志。

【讨论】:

  • 现在只有他总是在循环...我只看到:mRegProgress.setTitle("User Registrierung"); mRegProgress.setMessage("Bitte warten... Es kann bis zu 30 Sekunden dauern bis dein Account angelegt wird. Schließe nicht die APP!");在循环中他不跳过
【解决方案2】:

好的,我从您的代码中提取了 firebase 所需的最少必要内容并进行了尝试。它适用于我的测试数据库。 这是我使用的代码:

public class MainActivity extends AppCompatActivity {

    private DatabaseReference mDatabse;
    private FirebaseAuth mAuth;
    private Button mCreateBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mAuth = FirebaseAuth.getInstance();

        mCreateBtn = (Button) findViewById(R.id.btn);
        mCreateBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String display_name = "Otto";
                String email = "mmuuuu@email.com";
                String password = "111111";

                if(!TextUtils.isEmpty(display_name) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)){
                    register_user(display_name, email, password);
                }
            }
        });
    }

    private void register_user(final String display_name, String email, String password) {
        mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                if (task.isSuccessful()) {

                    FirebaseUser current_user = FirebaseAuth.getInstance().getCurrentUser();
                    String uid = current_user.getUid();

                    mDatabse = FirebaseDatabase.getInstance().getReference().child("Users");

                    HashMap<String, String> usermMap = new HashMap<>();
                    usermMap.put("name", display_name);
                    usermMap.put("status", "Hey, ich benutze die - App.");
                    usermMap.put("image", "default_pic");
                    usermMap.put("thumb_image", "default_pic");

                    mDatabse.setValue(usermMap);

                } else {
                    Toast.makeText(MainActivity.this, "Fehler! Überbrüfe noch einmal die Eingabefelder!", Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

(请注意,我没有使用 EditText 字段,而是将值直接放在 String 变量中,为简化起见。)

这是我的数据库规则:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
  }
}

这是我数据库中的书面数据。 (我将其导出为 JSON 文件):

"Users" : {
  "image" : "default_pic",
  "name" : "Otto",
  "status" : "Hey, ich benutze die - App.",
  "thumb_image" : "default_pic"
},

【讨论】:

  • 对不起,我没有看到你的链接代码。您应该将代码放入您的问题中,以便每个人都可以直接看到它。
  • 你能发布你的数据库规则和你使用的实现吗?
  • 是的,晚饭后;)
  • 好的,谢谢 :)
  • 晚餐吃完了吗? :D 他没有将数据放入数据库 xD 我的问题 xDD 也许 Teamviewer 会议在哪里? ^^
猜你喜欢
  • 1970-01-01
  • 2017-05-07
  • 2018-07-22
  • 1970-01-01
  • 2018-05-08
  • 2021-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多