2015-03-04 4 views
0

Я хотел бы использовать информацию «результата» в XMLRPCMethod. Когда поток завершен, правильные данные находятся в объекте результата.Получить информацию об объекте в mainactivity из класса

Это код, отрезанный от моего класса OpenerpRPC.java.

class XMLRPCMethod extends Thread { 
     private String method; 
     private Object[] params; 
     private Handler handler; 
     public Object result; 
     private OpenerpRpc callBack; 
     public XMLRPCMethod(String method, OpenerpRpc callBack) { 
      this.method = method; 
      this.callBack = callBack; 

      handler = new Handler(); 
     } 
     public void call() { 
      call(null); 
     } 
     public void call(Object[] params) {; 
      this.params = params; 
      start(); 
     } 
     @Override 
     public void run() { 
      try { 
       result = client.callEx(method, params); 
       handler.post(new Runnable() { 
        public void run() { 
         try { 
          callBack.resultcall(result); 
         } catch (XMLRPCException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
        } 
       }); 
      } catch (final XMLRPCFault e) { 
       handler.post(new Runnable() { 
        public void run() { 
         Log.d("Test", "error", e); 
        } 
       }); 
      } catch (final XMLRPCException e) { 
       handler.post(new Runnable() { 
        public void run() { 
         Throwable couse = e.getCause(); 
         if (couse instanceof HttpHostConnectException) { 
          Log.d(TAG, "error"+uri.getHost()); 
         } else { 
          Log.d("Test", "error", e); 
         } 
         Log.d("Test", "error", e); 
        } 
       }); 
      } 
     } 
    } 

Мой результат вызов в классе OpenerpRpc выглядит следующим образом:

public void resultcall(Object result) throws XMLRPCException{ 

     allres=result; 
     if (rtype.equals("login")){ 
      //Isn't impossible cast the result var with (String) because cause crash..why? 
      userid=""+result; 
     } 

     if (rtype.equals("read")){ 
      //Isn't impossible cast the result var with (String) because cause crash..why? 
      // userid=""+result; 

     } 


     // name of callback function to use in parent class (MainActivity) for receive data 
     this.parent.oerpcRec(rtype,allres); 

    } 

Это, как я могу получить данные в mainactivity

@SuppressWarnings("unchecked") 
    public void oerpcRec(String rtype,Object res) throws XMLRPCException{ 
     if (rtype=="login"){ 

      connector.setModel("res.users"); 
      Object[] Ids = {Integer.parseInt(connector.userid)}; 
      // set here the fields you wont loads 
      Object[] values={"name"}; 
      connector.Read(Ids,values); 
     } 
     if(rtype=="read"){ 
      Object[] ret=(Object[])res; 
      Map<String, Object> map1 = (Map<String, Object>) ret[0]; 
      if(ret.length > 1){ 


      } 


     } 
    } 

Но как я могу получить эту информацию в моем основная деятельность? Я получаю только информацию о значении идентификатора входа. Когда я помещаю точку останова в поток, он переходит только к функции resultcall, когда я пытаюсь войти в систему.

...

public void onClick(View v) { 
     try { 
      //here set user and pass for login 
      connector.Login(USER,PASS); 

      Object[] ids = {31,30,28,26}; 
      Object[] params ={"partner_id","tax_line","section_id","invoice_line"}; 

      connector.Read(ids,params); 


      //get information of openERP for specific id's 

     } catch (XMLRPCException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

ответ

0

Используйте interface

public interface MyListener {  
    public void callback(Object result); 
} 

Ваш MainActivity должен реализовать интерфейс

public class MyActivity extends Activity implements MyListener { 
     ... 
     ... 
     ... 
     @override 
     public void callback(Object result) { 
      // getting the result value. 
     } 
    } 

Так что, когда ваша отделка нить, выполнить метод обратного вызова():

MyListener ml; 
ml.callback(result); 

и способ callback() вас MainActivity получит объект.

Смежные вопросы