[英]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.