2013-05-17 1 views
3

Я создаю этот метод/функцию, и мне нужно реализовать обратный вызов. Я имею в виду, мне нужно добавить динамический аргумент, функцию. Я прочитал несколько статей, но я не понимаю, как это получить. Любая идея или пример использования?Как создать обратный вызов (добавить как динамический аргумент, функцию)?

public void httpReq (final String url, final Object postData, String callbackFunct, Object callbackParam,String callbackFailFunct) { 
    if (postData == null || postData == "") { 
     //GET 
     Thread testGET = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       StringBuilder builder = new StringBuilder(); 
       HttpClient client = new DefaultHttpClient(); 
       HttpGet httpGet = new HttpGet(url); 
       .... 
       } 
     } 
    } else { 
     //POST 
     Thread testPOST = new Thread(new Runnable() { 
      @Override 
      public void run() { 
       HttpGet httpPost = new HttpPost(url); 
       .... 
       } 
     } 
    } 
} 
+0

Этот код меня уже пугает. Надеюсь, вы просто используете его для своего сообщения здесь. –

+0

+1 на имени пользователя GoT и маршрутизации для маленького парня –

ответ

15

Определите интерфейс:

public interface MyInterface { 
    public void myMethod(); 
} 

добавить его в качестве параметра Я для метода

public void httpReq (final String url, final Object postData, String callbackFunct, Object callbackParam,String callbackFailFunct, MyInterface myInterface) { 
    // when the condition happens you can call myInterface.myMethod(); 
} 

при вызове метода вы будете иметь, например,

myObjec.httpReq(url, postData, callbackFunct, callbackParam, callbackFailFunct, 
new MyInterface() { 
    @Override 
    public void myMethod() { 

    } 
}); 

- это то, что вы д?

+0

Это способ сделать это. –

+0

Большое спасибо! Теперь я понимаю, как его использовать. @ChristianBongiorno Почему вас пугает код? Это за то, что указал «callbackFunct String, Object callbackParam, String callbackFailFunct»? Приветствую! – TyrionLannister

+0

У вас почти идентичный код темы, и вы объявили их анонимными внутренними классами (отсюда причина, по которой вам нужно объявить свои функциональные параметры как «final» Если вам нужно выполнить многопоточность, вы должны создать дискретные статические внутренние классы (не анонимные) и они должны быть «Callable», чтобы вы могли отправить их в службу Исполнителя. О, да, и вы здесь не на самом деле, НАЧАТЬ потоки. Я предполагаю, что все использование потоков вообще без ясной причины почему моя забота –