【发布时间】:2017-05-15 09:38:17
【问题描述】:
我有一个名为“bg”的全局变量。它在 Firebase 数据库引用“myRef”的 ValueEventListener 中初始化
但如果我尝试在 valueeventlistener 块之外使用变量的值,则该变量为空。好像被重置了一样。
我对安卓很陌生。请让我知道出了什么问题。
代码如下:
package com.example.tejasvi.donorfinder;
import android.support.v4.app.FragmentActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
private FirebaseAuth mAuth;
public String latlng[],bg;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
mAuth = FirebaseAuth.getInstance();
Bundle bundle = getIntent().getExtras();
String s= bundle.getString("Phone");
String path="Active Requests/"+mAuth.getCurrentUser().getUid()+"/"+s+"/Blood Group";
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference(path);
myRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
bg=dataSnapshot.getValue().toString();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(MapsActivity.this, "Error", Toast.LENGTH_LONG).show();
}
});
Toast.makeText(MapsActivity.this, bg, Toast.LENGTH_SHORT).show(); //bg is empty here
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
}
dataSnapshot.getValue() 的值为“A+ve”
JSON文件如下:
{
"Active Requests": {
"3R8XGIM5uSRv3sxQZ2sqqUnIjQ62": {
"9849949799": {
"Blood Group": "B+ve",
"Date of Requirement": "3/1/17",
"Direct or Replacement?": "Direct donation",
"Donation Type": "Whole Blood",
"For Self?": "Yes",
"Hospital Name": "Shekhar Hospital",
"Location": "12.945793000000002,77.56759339999999",
"Name": "Poorna Chandra Tejasvi",
"Units": "2"
}
},
"YL5oVxmua4gktNM2TwwPavL1Tj32": {
"123456789": {
"Blood Group": "A+ve",
"Date of Requirement": "1/1/17",
"Direct or Replacement?": "Direct donation",
"Donation Type": "Whole Blood",
"For Self?": "No",
"Hospital Name": "Columbia Asia Hospital - Hebbal",
"Location": "13.0509869,77.5937892",
"Recipient Name": "jssnxn",
"Recipient Relation": "Married",
"Units": "3"
}
}
}
}
【问题讨论】:
-
Active Requests/<uid>/<s>/Blood Group下的值为空,请将您的数据库导出为 JSON 并在此处发布内容。 -
它不为空。我试过烤块内的值,它可以工作
-
你能记录
dataSnapshot.toString()的值吗? -
是的,我可以。这里似乎有一个更深层次的问题。控件出块后,变量神奇地被重置。
-
在实际接收到数据之前,bg的值默认为null。发生的情况是您发出请求并尝试访问尚不可用的响应。
标签: android firebase firebase-realtime-database