从类中获取mainactivity中的对象信息

时间:2015-03-04 21:26:45

标签: android object openerp

我想在XMLRPCMethod中使用'result'的信息。线程完成后,正确的数据就在结果对象中。

这是从我的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){


            }


        }
    }

但是我怎样才能在主动活动中获得这些信息?我只获取登录ID值的信息。当我在线程中放置一个断点时,它只会在我尝试登录时进入函数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();
        }

    }

1 个答案:

答案 0 :(得分: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.
        }
    }

所以当你的线程完成时,执行callback()方法:

 MyListener ml;
 ml.callback(result);

并且您callback()的{​​{1}}方法将收到该对象。

相关问题