Java Android:从匿名类向线程返回值的正确方法是什么?
getVehicleName()函数需要做哪些修改才能将车辆名称正确返回到父线程?最好的方法是什么?我尝试了处理程序和回调函数,但最终出现编译时错误(“试图分配较弱的访问权限”) 父函数(未粘贴完整代码) 功能Java Android:从匿名类向线程返回值的正确方法是什么?,java,android,anonymous-class,Java,Android,Anonymous Class,getVehicleName()函数需要做哪些修改才能将车辆名称正确返回到父线程?最好的方法是什么?我尝试了处理程序和回调函数,但最终出现编译时错误(“试图分配较弱的访问权限”) 父函数(未粘贴完整代码) 功能 public boolean checkifVehicleAvailable(String drive_this) { if( getVehicleName(drive_this).equals("1111A"){ return true; }
public boolean checkifVehicleAvailable(String drive_this) {
if( getVehicleName(drive_this).equals("1111A"){
return true;
}
return false;
}
// Need to be modified to return String
public String getVehicleName(String ID){
/*DB references*/
//final String vehicleName;
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef;
DatabaseReference childRef;
myRef = database.getReference();
childRef = myRef.child("vehicles");
childRef.child(ID).addListenerForSingleValueEvent(new ValueEventListener() {
String vehicleSecretName;
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
vehicleName = dataSnapshot.child("vehicleName").getValue(String.class);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
您可以将该值保存在SharedReferences中,并注册SharedReferenceListener,以便在某个值发生更改时通知此侦听器。侦听器的外观可能如下所示:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if(key.equals("myKey") {
sharedPreferences.getString(key);
//do whatever after that > e.g. start your async task or load that value into an AsyncTask via execute(..) method.
}
}
例如,你可以说:
final boolean[] result = new boolean[1];
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
boolean val = foo();
result [0] = val;
} catch (Exception e){
}
});
}
private boolean foo(){
return false;
}
请格式化你的代码。在第一部分中,您使用了
try
而不使用catch
。您可以编写getVehicleName(drive\u this)。等于(“1111A”)
,但getVehicleName是无效的。已编辑。我正在寻找修改getVehicleName()以从firebase DB返回字符串值的正确方法。
final boolean[] result = new boolean[1];
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
boolean val = foo();
result [0] = val;
} catch (Exception e){
}
});
}
private boolean foo(){
return false;
}