2016-04-26 5 views
0

Ich versuche, einen Wert in eine Callback-Funktion in meinem Code zu übergeben, ich bin meine callback an eine andere Funktion übergeben, und ich will es die callback einen Zustand zurückzukehren,Wie übergibt man einen Wert für eine Callable-Funktion in Android Studio?

hier meine Funktion ist, ich bin > Versenden von

wifiWrapper myWifiWrapper = new wifiWrapper(); //- INIZILIZING WIFI 
        myWifiWrapper.checkWifiState(this, wifiStateCallback); 

hier mein Ende Funktion in der wifiWrapper Klasse>

//checks if the wifi is On or Off 
    public void checkWifiState (Context context, Callable callback) { 


     WifiManager wifi = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 

     boolean isOn; 


     if (wifi.isWifiEnabled()){ 

      Toast.makeText(context.getApplicationContext(), "Your Wi-Fi is enabled", //wifi is enabled 
        Toast.LENGTH_SHORT).show(); 
      isOn = true; 

     } else { 

      Toast.makeText(context.getApplicationContext(), "Your Wi-Fi is disabled", //wifi is disabled 
        Toast.LENGTH_SHORT).show(); 
      isOn = false; 

     } 



     try { //trys to call back to the callable function 
      callback.call(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

und hier ist mein aufrufbare, dass ich vorbei>

//callback for the ifiState 
    Callable wifiStateCallback = new Callable() { 
     @Override 
     public Boolean call() throws Exception { 


      return null; 
     } 
    }; 

PROBLEM ich die isOnState zum callable übergeben möchten, und kann nicht scheinen, damit es funktioniert. Ich füge

callback.call(isOn); 

, aber es funktioniert nicht, es sagt, es ist nicht

angewendet werden kann
+1

Sie erklärt nie das Problem, das Sie mit diesem Code konfrontiert sind. –

+0

Können Sie etwas erklären, was Ihr Problem eigentlich ist? –

+0

Wenn Sie sagen, Sie Callable nicht enthalten Boolean dann pass 'IsOn' zu 'Callback.Call (IsOn)' zu Ihrem Rückruf –

Antwort

2

Sie können nicht Argument hinzufügen aus dem Nichts call() aus und erwarten, dass es funktioniert. Callable call() ist argumentless. Was man jedoch tun, ist aufrufbare zu erweitern und übergeben Sie, was Sie über Konstruktor wollen:

class MyCallable extends Callable { 

    boolean isOn; 

    public MyCallable(boolean isOn) { 
     mIsOn = isOn; 
    } 

    public Boolean call() throws Exception { 
     if (mIsOn) { 
      ... 
     } 
     ... 
    } 

} 

so dann

Callable wifiStateCallback = new MyCallable(false); 
+0

Ich versuche, diese Klasse in meinem Scannen Barcode-Aktivitätsklasse hinzuzufügen, aber es das Wort "Callable" Es sagt, dass hier keine Schnittstelle erwartet wird. @Marcin Orlowski –

+0

können Sie mir zeigen, wie es in meinem eigenen Code umgesetzt wird? Ich verstehe nicht, wie man es @Marcin Orlowski verwendet –