Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:从匿名类向线程返回值的正确方法是什么?_Java_Android_Anonymous Class - Fatal编程技术网

Java Android:从匿名类向线程返回值的正确方法是什么?

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; }

getVehicleName()函数需要做哪些修改才能将车辆名称正确返回到父线程?最好的方法是什么?我尝试了处理程序和回调函数,但最终出现编译时错误(“试图分配较弱的访问权限”)

父函数(未粘贴完整代码)

功能

 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;
}