gpt4 book ai didi

java - 应用程序因空对象引用而崩溃

转载 作者:行者123 更新时间:2023-12-02 10:19:41 26 4
gpt4 key购买 nike

我在调用 (user.getlat) 和 (user.getlng) 时遇到问题。我已经全局声明了用户对象,并在 getUserData() 方法中初始化了它。

但是当我运行应用程序时,应用程序崩溃了,并且在 logcat 中显示:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“double com.example.profile.User.getLat()”

public class Profile extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;
private LocationManager locationManager;
private LocationListener locationListener;

private FirebaseAuth mAuth;
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference myRef = database.child("users");
User user;


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

SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.mapFragment);
mapFragment.getMapAsync(this);

mAuth = FirebaseAuth.getInstance();
}

public void getUserData(){
String uID = mAuth.getCurrentUser().getUid();
myRef.child(uID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

dataSnapshot.getChildren();
user = dataSnapshot.getValue(User.class);

Toast.makeText(Profile.this, "" + user.lng, Toast.LENGTH_LONG).show(); // Prints the value normally!

}

@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Profile.this, "Failed to read from database!", Toast.LENGTH_LONG).show();
}
});
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;

LatLng userL = new LatLng(user.getLat(),user.getLng()); // The problem occurs here!
mMap.clear();
mMap.addMarker(new MarkerOptions().position(userL).title("Your Location"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userL,17));

}

}

最佳答案

首先,您没有在任何地方调用 getUserData() 方法。我读到您也尝试在 onCreate() 中添加该逻辑,但它不起作用。

添加监听器并不意味着您会立即获得期望的结果。

仅使用onMapReady()方法来设置 map ,其设置不依赖于User。仅当您检测到用户数据发生更改时才添加/修改 map 标记。查看更改:

public void getUserData(){
String uID = mAuth.getCurrentUser().getUid();
myRef.child(uID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {

dataSnapshot.getChildren();
user = dataSnapshot.getValue(User.class);
LatLng userL = new LatLng(user.getLat(),user.getLng());
if(mMap!=null){
mMap.clear();
mMap.addMarker(new MarkerOptions().position(userL).title("Your
Location"));
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(userL,17));
}
Toast.makeText(Profile.this, "" + user.lng, Toast.LENGTH_LONG).show(); // Prints the value normally!

}

@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(Profile.this, "Failed to read from database!", Toast.LENGTH_LONG).show();
}
});
}

@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}

请调用方法getUserData()或将其代码移至onCreate()中。

关于java - 应用程序因空对象引用而崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54427178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com