我的Android应用程序中有以下java代码,想要一种将Java列表转换为可在javascript中使用的数组的方法:
Java的:
public void onCompleted(Listusers, Response response) { for(int i = 0; i < users.size(); i++) { //add to an array object that can be used in Javascript webView.loadUrl("javascript:fetchFriends(arrObj)"); } }
使用Javascript:
//this is how I want to be able to use the object in Javascript function parseFriends(usersObjectFromJava){ var users = []; for (var i = 0; i < usersObjectFromJava.length; i++) { var u = { Id: usersObjectFromJava[i].id + "", UserName: usersObjectFromJava[i].username, FirstName: usersObjectFromJava[i].first_name, LastName: usersObjectFromJava[i].last_name, }; users[i] = u; } }
有些人可以帮我用Java代码创建usersObjectFromJava,以便它可以在javascript中使用吗?
使用GSON 将java对象转换为JSON字符串,你可以通过它来实现
Gson gson = new Gson(); TestObject o1 = new TestObject("value1", 1); TestObject o2 = new TestObject("value2", 2); TestObject o3 = new TestObject("value3", 3); List<TestObject> list = new ArrayList<TestObject>(); list.add(o1); list.add(o2); list.add(o3);
gson.toJson(列表)会给你
[{ "PROP1": "VALUE1", "PROP2":2},{ "PROP1": "VALUE2", "PROP2":2},{ "PROP1": "值3", "PROP2":3}]
现在,您可以使用JSON.parse()将JSON反序列化为Javascript对象.
我会假设这样做:
Java的:
public void onCompleted(List<GraphUser> users, Response response) { JSONArray arr = new JSONArray(); JSONObject tmp; try { for(int i = 0; i < users.size(); i++) { tmp = new JSONObject(); tmp.put("Id",users.get(i).id); //some public getters inside GraphUser? tmp.put("Username",users.get(i).username); tmp.put("FirstName",users.get(i).first_name); tmp.put("LastName",users.get(i).last_name); arr.add(tmp); } webView.loadUrl("javascript:fetchFriends("+arr.toString()+")"); } catch(JSONException e){ //error handling } }
JavaScript的:
function fetchFriends(usersObjectFromJava){ var users = usersObjectFromJava; }
您将不得不稍微更改Java代码(即使用公共getter或向JSONObjects
.中添加更多/更少的信息.
JSON
默认情况下包含在Android中,因此不需要外部库.
我希望我理解你的问题.
我遇到的小事:你fetchFriends
在Java 中使用它但parseFriends
在Javascript中调用它,我将它们重命名为fetchFriends