无法从Firebase-Android Studio(Java)检索数据
我试图从数据库中读取一个值,但似乎不起作用。代码的目的是从Firebase中的用户UID中获取计数器值,这将更改图像的源。计数器在另一个活动中更改,工作正常。我觉得我很接近,但不确定下一步该怎么办。我已尝试打印出该值,但未在控制台中打印 完整免责声明,我是android开发和firebase新手,因此如果这是一个简单的错误/更正,我会提前道歉 调用数据库的活动已更新:无法从Firebase-Android Studio(Java)检索数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我试图从数据库中读取一个值,但似乎不起作用。代码的目的是从Firebase中的用户UID中获取计数器值,这将更改图像的源。计数器在另一个活动中更改,工作正常。我觉得我很接近,但不确定下一步该怎么办。我已尝试打印出该值,但未在控制台中打印 完整免责声明,我是android开发和firebase新手,因此如果这是一个简单的错误/更正,我会提前道歉 调用数据库的活动已更新: public class Menu extends AppCompatActivity { private static
public class Menu extends AppCompatActivity {
private static final String TAG = "Menu";
Button btn;
public ImageView image;
public static int counter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu);
// Add an image
image = findViewById(R.id.imageView2);
image.setImageResource(R.drawable.g1);
//image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.g1));
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("counter");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
menuCounter uCount = dataSnapshot.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).getValue(menuCounter.class);
System.out.println("Simon says" + uCount.counter);
counter = uCount.counter;
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("The read failed: " + databaseError.getCode());
}
});
System.out.println("Counter is: " + counter);
if (counter == 1) {
image.setImageResource(R.drawable.g2);
}
btn = findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent WIP = new Intent(Menu.this, WIP.class);
startActivity(WIP);
}
});
}
}
吸气剂类:
package com.alanlyne.tbm;
public class menuCounter {
int counter;
public menuCounter() {
}
public menuCounter(int counter) {
this.counter = counter;
}
public int getCounter() {
return counter;
}
}
更改计数器值的活动:
public class WIP extends AppCompatActivity {
Button btn;
DatabaseReference databaseName;
FirebaseAuth mFirebaseAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wip);
databaseName = FirebaseDatabase.getInstance().getReference("counter");
btn = findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Menu.counter = 1;
Intent act2= new Intent(WIP.this,Menu.class);
// act2.putExtra("myImageResource", R.drawable.g2);
startActivity(act2);
addCounter();
}
});
}
private void addCounter() {
Menu.counter = 1;
String id = databaseName.push().getKey();
menuCounter counter = new menuCounter(Menu.counter);
databaseName.child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(counter);
}
}
Firebase图像:
在
menuCounter
类中(考虑重命名为menuCounter
),使用int计数器
应声明为公共整数计数器代码>。这是因为每个属性都是在getValue(menuCounter.class)
中直接设置的(uCount.counter=dataSnapshot.counter
),而不使用构造函数或getSomeVar()
和setSomeVar()
函数。如果这最终解决了问题,我会把它写下来作为答案。你解决了问题吗?很抱歉耽搁了。是的,这是可行的,但由于某些原因,计数器值没有更新或打印。我已经更新了上面的代码。它在方法内部更新,而不是在方法外部更新?我把if语句移到了它里面,它工作了,但是有一点延迟。这只是从firebase加载信息吗?理想情况下,我希望数据库调用menuCounter
类中的if statem,ent(考虑重命名为menuCounter
以遵循)之外的int计数器
应声明为公共整数计数器代码>。这是因为每个属性都是在getValue(menuCounter.class)
中直接设置的(uCount.counter=dataSnapshot.counter
),而不使用构造函数或getSomeVar()
和setSomeVar()
函数。如果这最终解决了问题,我会把它写下来作为答案。你解决了问题吗?很抱歉耽搁了。是的,这是可行的,但由于某些原因,计数器值没有更新或打印。我已经更新了上面的代码。它在方法内部更新,而不是在方法外部更新?我把if语句移到了它里面,它工作了,但是有一点延迟。这只是从firebase加载信息吗?理想情况下,我希望if statem,ent位于数据库调用之外