簡體   English   中英

如何將參數/參數傳遞給回調 function?

[英]How do I pass parameters/argument to a callback function?

一個天真的問題,因為我對編程有點陌生。 我正在開發一個 Android 應用程序,我需要將參數傳遞給回調方法(不確定措辭是否正確)。

我希望參數/變量可用於主 Function。 我正在調用調用者來調用我的主要 function,因此需要從調用者傳遞參數。

類似於經典功能的東西

例子

method(param1, param2);

function method(param1, param2){
    Log(param1 + param 2);
      ....
}

我需要下面的代碼來實現上面例子的功能

代碼如下:

//Caller:- 
 getChioceList(new MyCallback() {
                @Override
                public void onCallback(ArrayList<String> value) {
                Log.d("TAG", "Config CallBack " + value);
                }
});

//Interface
public interface MyCallback{
    void onCallback(ArrayList<String> value);
}

//main function: 我想給這個方法傳遞一些參數

 public void getChioceList(final MyCallback myCallback) {
     final ArrayList < String > result = new ArrayList < > ();
     final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
     Query query = ref.child("Device").orderByChild("home").equalTo(homeID);
     query.addListenerForSingleValueEvent(new ValueEventListener() {

         @Override
         public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

             for (DataSnapshot dataSnapshots: dataSnapshot.getChildren()) {
                 result.add(dataSnapshots.getKey());
                 Log.i(TAG, "Config: get Input 3 " + result);
             }
             myCallback.onCallback(result);
         }

         @Override
         public void onCancelled(@NonNull DatabaseError databaseError) {}
     });
 }

請幫忙...

根據我的理解。 基本上,您想將某些內容傳遞給回調方法。

我建議創建另一個 class 來實現ValueEventListener

像這樣

public class SomeClassThatWillImplement implements ValueEventListener {

    private String cVar1;
    private String cVar2;

    public SomeClassThatWillImplement (String param1, String parma2) {
        this.cVar1 = param1;
        this.cVar2 = param2;
    }

    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        //Do something with this.cVar1
        //Do something with this.cVar2
        for (DataSnapshot dataSnapshots : dataSnapshot.getChildren()) {
            result.add(dataSnapshots.getKey());
             Log.i(TAG, "Config: get Input 3 " + result);
        }
        myCallback.onCallback(result);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        //Do something with this.cVar1
        //Do something with this.cVar2
    }

}

要使用上述 class,

public void getChioceList(final MyCallback myCallback) {
    final ArrayList<String> result = new ArrayList<>();
    final DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
    Query query = ref.child("Device").orderByChild("home").equalTo(homeID);
    query.addListenerForSingleValueEvent(new SomeClassThatWillImplement(param1, param2));
}

希望這會有所幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM