2014-09-19 5 views
0

Comment appeler une méthode dans une classe différente et obtenir le résultat dans MainActivity.Comment appeler une méthode

J'appelle une méthode Get dans mon API. Mais je ne suis pas sûr de savoir comment transmettre les données de résultat à MainActivity:

Mon code

classe CallAPI:

... 
public void Get() { 
     Log.i(TAG, "GET()"); 
     // GET method example 
     new AsyncTask<Void, Void, String>() { 

      protected String doInBackground(Void... parameters) { 
       API api = new API(mApiKey, mApiSecret); 

       List<NameValuePair> params = new ArrayList<NameValuePair>();  
       params.add(new BasicNameValuePair("api_key", mApiKey));      

       return api.get("category", params); 
      } 

      protected void onPostExecute(String result) { // *** >I NEED THIS result< *** 
       Log.i(TAG + " - APIRESULT", "GET() => " + result); 
      } 

     }.execute(); 
    }//end Get 
... 

classe MainActivity:

... 
super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main) 

      mCallApi.Get(); 

... 

Alors dans MainActivity je peux exécuter la méthode, mais je ne sais pas comment la date de résultat ici.

Merci

+0

fournir le type de retour à la méthode .. et lorsque vous appelez cette méthode ... stocker la réponse dans l'objet chaîne .. –

Répondre

0

Utilisez une interface. Comme le code est asynchrone, vous ne pouvez pas utiliser la valeur de retour.

interface myCallBack(){ 
    public void callBack(String result); 
} 

public void Get(final myCallBack callback) { 
    Log.i(TAG, "GET()"); 
    // GET method example 
    new AsyncTask<Void, Void, String>() { 

     protected String doInBackground(Void... parameters) { 
      API api = new API(mApiKey, mApiSecret); 

      List<NameValuePair> params = new ArrayList<NameValuePair>();  
      params.add(new BasicNameValuePair("api_key", mApiKey));      

      return api.get("category", params); 
     } 

     protected void onPostExecute(String result) { // *** >I NEED THIS result< *** 
      Log.i(TAG + " - APIRESULT", "GET() => " + result); 
      callback.callBack(result); 
     } 

    }.execute(); 
} 

La de la classe:

...

get(new myCallBack(){ 
    public void callBack(String result){ 
    //do something with result. 
    } 
} 
); 
0

A. public void get() {} ceci ne dispose pas arragment pour retourner une valeur à l'appelant B. même s'il a un type de retour, il n'est pas pertinent, puisque vous générez une méthode interne AsyncTask, la valeur de retour n'est pas pertinente pour le résultat de l'opération.

Maintenant à venir à votre problème, cela peut être résolu via le motif de conception Observer. voici ma réponse pour une question similaire il y a quelque temps, passez par là. Cela va résoudre votre problème. Observer Design