Bonjour, je bosse sur une application client serveur entre android et un serveur OpenERP, je peux établir la connexion avec une base de donnée, maintenant j'essai de lire, écrire, créer des partenaires.. dans de la base de donnée, ces codes sont en java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
------------------------
Java Code for Create Method
------------------------
 
package com.xmlrpc.client;
 
import java.net.URL;
import java.util.HashMap;
import java.util.Vector;
 
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
public class Create {
 
public static void main(String args[]) throws Exception {
 
Vector params1 = new Vector();
params1.addElement("openerpdb");
params1.addElement("admin");
params1.addElement("admin");
 
XmlRpcClient xmlrpcLogin = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigLogin = new XmlRpcClientConfigImpl();
xmlrpcConfigLogin.setEnabledForExtensions(true);
xmlrpcConfigLogin.setServerURL(new URL("http", "localhost", 8069, "/xmlrpc/common"));
xmlrpcLogin.setConfig(xmlrpcConfigLogin);
 
Object id = xmlrpcLogin.execute("login", params1);
System.out.println("Login Id : " + id.toString());
 
System.out.println("------------------------");
 
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setEnabledForExtensions(true);
clientConfig.setServerURL(new URL("http", "localhost", 8069, "/xmlrpc/object"));
client.setConfig(clientConfig);
 
HashMap<Object, Object> params = new HashMap<Object, Object>();
 
params.put("street", "Stendhal");
params.put("partner_id", "24");
params.put("city", "Punalur3");
params.put("name", "ShameerHabeeb3");
 
Vector<Object> arg = new Vector<Object>();
 
arg.add("openerpdb");
arg.add(1);
arg.add("admin");
arg.add("res.partner.address");
arg.add("create");
arg.add(params);
 
Object ret_id = client.execute("execute", arg);
System.out.println("Created new partner address with id :" + ret_id.toString());
 
}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
--------------------------
Java Code for Read mthod
--------------------------
 
package com.xmlrpc.client;
 
import java.net.URL;
import java.util.HashMap;
import java.util.Vector;
 
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
public class Read {
 
public static void main(String args[]) throws Exception {
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setEnabledForExtensions(true);
clientConfig.setServerURL(new URL("http", "192.168.1.153", 8069, "/xmlrpc/object"));
client.setConfig(clientConfig);
 
Object[] params2 = { "city", "name", "partner_id", "country_id", "email", "create_date",
"write_date" };
 
Vector<Object> arg = new Vector<Object>();
 
arg.add("openerpdb");
arg.add(1);
arg.add("admin");
arg.add("res.partner.address");
arg.add("read");
arg.add(3);
arg.add(params2);
 
HashMap ids = (HashMap) client.execute("execute", arg);
 
Object[] partner = (Object[]) ids.get("partner_id");
Object[] country = (Object[]) ids.get("country_id");
 
System.out.println(ids.get("id"));
System.out.println(ids.get("name"));
System.out.println(ids.get("city"));
System.out.println(ids.get("email"));
System.out.println(ids.get("create_date"));
System.out.println(ids.get("write_date"));
System.out.println("partner : " + partner[0].toString() + " , " + partner[1].toString());
System.out.println("country : " + country[0].toString() + " , " + country[1].toString());
}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
-----------------------------
Java Code for write method
-----------------------------
 
 
package com.xmlrpc.client;
 
import java.net.URL;
import java.util.HashMap;
import java.util.Vector;
 
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
 
public class Write {
public static void main(String args[]) throws Exception {
 
Vector params1 = new Vector();
params1.addElement("openerpdb");
params1.addElement("admin");
params1.addElement("admin");
 
XmlRpcClient xmlrpcLogin = new XmlRpcClient();
XmlRpcClientConfigImpl xmlrpcConfigLogin = new XmlRpcClientConfigImpl();
xmlrpcConfigLogin.setEnabledForExtensions(true);
xmlrpcConfigLogin.setServerURL(new URL("http", "localhost", 8069, "/xmlrpc/common"));
xmlrpcLogin.setConfig(xmlrpcConfigLogin);
 
Object id = xmlrpcLogin.execute("login", params1);
System.out.println("Login Id : " + id.toString());
 
System.out.println("------------------------");
 
XmlRpcClient client = new XmlRpcClient();
XmlRpcClientConfigImpl clientConfig = new XmlRpcClientConfigImpl();
clientConfig.setEnabledForExtensions(true);
clientConfig.setServerURL(new URL("http", "localhost", 8069, "/xmlrpc/object"));
client.setConfig(clientConfig);
 
HashMap<Object, Object> params = new HashMap<Object, Object>();
 
params.put("street", "Edamon34");
 
Vector<Object> arg = new Vector<Object>();
Object ids[] = { 25, 24, 23 };
arg.add("openerpdb");
arg.add(1);
arg.add("admin");
arg.add("res.partner.address");
arg.add("write");
arg.add(ids);
arg.add(params);
 
Object ret_id = client.execute("execute", arg);
System.out.println("result :" + ret_id.toString());
}
}
pour android j'ai essayé le code suivant (l'application ne démarre pas):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
 
	public Button login_button;
	public TextView host_tv,user_tv, pass_tv;
	public EditText host_txt,user_txt, pass_txt;
 
	public XMLRPCClient rpcClient, regClient;
	public static final String HOST = "http://192.168.2.8:8069/xmlpc";
	public static final String URL_COMMON = "/common";
	public static final String URL_OBJECT = "/object";
	public static final String URL_DB = "/db";
 
	public String DB_NAME = "";
	public String USERNAME = "";
	public String PASSWORD = "";
	public String res = "";
	public int uid = 0;
 
	public String partner = "";
	public int partner_id = 0;
	public Spinner db_spinner;
	public ArrayAdapter spinnerArrayAdapter;
 
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
 
		// TEXTVIEW		
		user_tv = (TextView) findViewById(R.id.user_tv);
		pass_tv = (TextView) findViewById(R.id.pass_tv);
		// EDITTEXT
		user_txt = (EditText) findViewById(R.id.user_txt);
		pass_txt = (EditText) findViewById(R.id.pass_txt);
 
		// BUTTOn
		login_button = (Button) findViewById(R.id.login_button);
		login_button.setOnClickListener(LoginButtonClick);
 
 
		db_spinner = (Spinner) findViewById(R.id.db_spinner);
		spinnerArrayAdapter = new ArrayAdapter(this ,android.R.layout.simple_spinner_item);
		spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
		getDatabaseList();
 
		db_spinner.setAdapter(spinnerArrayAdapter);
	}
 
	public void showToastNotification(String  message) {
		Toast tmptoast = Toast.makeText(this, message, Toast.LENGTH_SHORT);
		tmptoast.show();
 
	}
 
	private OnClickListener LoginButtonClick = new OnClickListener() {
		@Override
		public void onClick(View v) {
			try {
				uid = Create();
				if (uid > 0) {
					String succes ="successful login from "+ USERNAME+" using database "+DB_NAME;
					showToastNotification(succes);
				} else {
					String fail = "bad login or password from "+ USERNAME+" using database " +DB_NAME;
					showToastNotification(fail);
				}
			} catch (Exception e) {
				Log.i("------------------ LOGIN FAILED 1", e.toString());
			}
		}
	};
	public int Create()// String host, int port, String tinydb, String login,
						// String password)
	{
		USERNAME = user_txt.getText().toString();
		PASSWORD = pass_txt.getText().toString();
		DB_NAME = db_spinner.getSelectedItem().toString();
		rpcClient = new XMLRPCClient(HOST+URL_OBJECT );
 
				// Create
			  HashMap<String, Object> vals = new HashMap<String, Object>();
			    vals.put("name", "un nom du partenaire");
			    vals.put("ref", "une reference");
			    Object[] params = new Object[]{DB_NAME, 1,PASSWORD, "res.partner", "create", vals};
 
				//Object res = null;
				try {
					res =(String) rpcClient.call("execute", params);
					Log.i("------------------CURRENT USER ID  ",  res);
 
					Object uid1 = Integer.parseInt(res);
					if (uid1 instanceof Integer)
						return (Integer) uid1;
					return -1;
	} catch (XMLRPCException e) {
		Log.i("------------------ LOGIN FAILED-XMLRPCException", e.toString());
		return -2;
	} catch (Exception e) {
		Log.i("------------------ LOGIN FAILED-EXCEPTION", e.toString());
		return -3;
	}}
 
 
	public void  getDatabaseList() {
		 rpcClient = new XMLRPCClient(HOST+URL_DB);
			Vector<Object> params = new Vector<Object>();
			Object result = null;
			try {
				 result= rpcClient.call("list", params);
			} catch (XMLRPCException e) {
				e.printStackTrace();
			}
			Object[] a = (Object[]) result;
			for (int i = 0; i < a.length; i++) {
			    if (a[i] instanceof String){
			    	spinnerArrayAdapter.add(a[i].toString());
			    	}
				}
		Log.i("------------------ getDatabaseList","4");
		if (a.length == 0) {
			showToastNotification("No database exist");
		}
	 }
}
voici le logcat:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
02-28 11:54:11.600: ERROR/AndroidRuntime(628): FATAL EXCEPTION: main
02-28 11:54:11.600: ERROR/AndroidRuntime(628): java.lang.RuntimeException: Unable to start activity ComponentInfo{mn.usi.openerpdroid/mn.usi.openerpdroid.OpenERPDroid}: java.lang.NullPointerException
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.os.Looper.loop(Looper.java:123)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at java.lang.reflect.Method.invokeNative(Native Method)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at java.lang.reflect.Method.invoke(Method.java:521)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at dalvik.system.NativeStart.main(Native Method)
02-28 11:54:11.600: ERROR/AndroidRuntime(628): Caused by: java.lang.NullPointerException
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at mn.usi.openerpdroid.OpenERPDroid.getDatabaseList(OpenERPDroid.java:136)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at mn.usi.openerpdroid.OpenERPDroid.onCreate(OpenERPDroid.java:66)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-28 11:54:11.600: ERROR/AndroidRuntime(628):     ... 11 more
02-28 11:54:11.610: WARN/ActivityManager(58):   Force finishing activity mn.usi.openerpdroid/.OpenERPDroid
02-28 11:54:12.174: WARN/ActivityManager(58): Activity pause timeout for HistoryRecord{450b3408 mn.usi.openerpdroid/.OpenERPDroid}
02-28 11:54:22.822: WARN/ActivityManager(58): Activity destroy timeout for HistoryRecord{450b3408 mn.usi.openerpdroid/.OpenERPDroid}