Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java列表转换为Javascript数组_Java_Javascript_Android_Arrays_List - Fatal编程技术网

将Java列表转换为Javascript数组

将Java列表转换为Javascript数组,java,javascript,android,arrays,list,Java,Javascript,Android,Arrays,List,我的Android应用程序中有以下java代码,希望找到一种将java列表转换为可在javascript中使用的数组的方法: 爪哇: public void未完成(列出用户、响应){ 对于(int i=0;i

我的Android应用程序中有以下java代码,希望找到一种将java列表转换为可在javascript中使用的数组的方法:

爪哇:

public void未完成(列出用户、响应){
对于(int i=0;i
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;
        }
    }
//这就是我希望能够在Javascript中使用对象的方式
函数parseFriends(usersObjectFromJava){
var用户=[];
for(var i=0;i

有人能帮我用Java代码创建usersObjectFromJava,以便在javascript中使用吗?

这只是一个例子,首先添加javascript接口。它将成为javascript和java代码之间的桥梁。 addJavascriptInterface(新的JSInterface(),“interface”)

在javascript中,您可以这样添加

     "window.interface.setPageCount(pageCount1);"

接口是java和javascript之间的共同关键字。创建一个类JSInterace并定义一个方法setPageCount(intA)。脚本将返回一个值,您可以在java方法中使用该值

爪哇:

您必须稍微更改Java代码(即使用公共getter或向JSONObjects添加更多/更少的信息)。 默认情况下,
JSON
包含在Android中,因此不需要外部库

我希望我理解你的问题


我遇到的一件小事:你在Java中使用
fetchFriends
,但在Javascript中它被称为
parseFriends
,我将它们重命名为
fetchFriends
你可以使用Google Gson库()将Java列表对象转换为JSON。确保设置了正确的字段,如ID、用户名、名字等,并且在Java脚本端设置了相同的代码。

使用 要将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-Gson=new-Gson();
TestObject o1=新的TestObject(“值1”,1);
TestObject o2=新的TestObject(“值2”,2);
TestObject o3=新的TestObject(“值3”,3);
列表=新的ArrayList();
添加(o1);
添加(o2);
添加(o3);
toJson(list)将为您提供

[{“prop1”:“value1”,“prop2”:2},{“prop1”:“value2”,“prop2”:2},{“prop1”:“value3”,“prop2”:3}]


现在您可以使用JSON.parse(),将JSON反序列化为Javascript对象。

您可以使用Gson库

Gson gson = new GsonBuilder().create();
JsonArray jsonArray = gson.toJsonTree(your_list, TypeClass.class).getAsJsonArray();
使用Jackson。 您需要向要传递的POJO的每个属性添加“@JsonProperty”注释,然后执行以下操作:

    String respStr = "";

            for(Object whatever: MyList)    
        {
                JSONObject dato = new JSONObject();                    
                    dato.put("FirstField", whatever.SomeData());        
                        dato.put("SecondField", whatever.SomeData2());

                    StringEntity entity = new StringEntity(dato.toString());        
                    post.setEntity(entity);

                           webView.loadUrl("javascript:fetchFriends("+entity+")");
        }

我不确定为什么没有提到关于
jaxb
的答案。我只是在想
jaxb
很适合解决这类问题

对于带注释的
jaxb
类的示例样式,请查找以下内容

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class ResponseAsList {
    private List < Object > list = new ArrayList < Object > ();

    public ResponseAsList() {
        // private default constructor for JAXB
    }
    public List < Object > getList() {
        return list;
    }

    public void setList(List < Object > list) {
        this.list = list;
    }

}
import java.util.ArrayList;
导入java.util.List;
导入javax.xml.bind.annotation.XmlAccessType;
导入javax.xml.bind.annotation.XmlAccessorType;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类响应列表{
私有列表<对象>列表=新的ArrayList<对象>();
公众回应名单(){
//JAXB的私有默认构造函数
}
公共列表getList(){
退货清单;
}
公共无效集合列表(列表<对象>列表){
this.list=列表;
}
}


您将在这些列表中填充数据,并在
xml
json
中进行
marshall
处理。向客户端获取
json
后,您可以执行
var myArray=json.parse(响应);

虽然我通常主张使用GSON或Jackson之类的工具为您进行JSON转换,但如果您处于有限的环境(如Android)中,并且不想捆绑一堆依赖项,那么您可以很容易地进行JSON转换

public class JsonHelper {
  public static String convertToJSON(List<GraphUser> users) {
    StringBuilder sb = new StringBuilder();
    for (GraphUser user : users) {
      sb.append(convertToJSON(user));
    }
    return sb.toString();
  }

  public static String convertToJSON(GraphUser user) {
    return new StringBuilder()
      .append("{")
        .append("\"id\":").append(user.getId()).append(",")
        .append("\"admin\":").append(user.isAdmin() ? "true" : "false").append(",")
        .append("\"name\":\"").append(user.getName()).append("\",")
        .append("\"email\":\"").append(user.getEmail()).append("\"")
      .append("}")
      .toString();
  }
}
public类JsonHelper{
公共静态字符串convertToJSON(列出用户){
StringBuilder sb=新的StringBuilder();
for(GraphUser用户:用户){
sb.append(convertToJSON(user));
}
使某人返回字符串();
}
公共静态字符串convertToJSON(GraphUser用户){
返回新的StringBuilder()
.append(“{”)
.append(“\”id\“:”).append(user.getId()).append(“,”)
.append(“\'admin\”:”).append(user.isAdmin()?“true”:“false”).append(“,”)
.append(“\”名称:\”).append(user.getName()).append(“\”,”)
.append(“\”email\:\”).append(user.getEmail()).append(“\”)
.append(“}”)
.toString();
}
}
如果愿意,您可以在
GraphUser
上创建
toJSON()
方法来放置逻辑。或者使用可注入的json帮助程序库而不是静态方法(我会)。或任何数量的其他抽象。许多开发人员更喜欢将模型对象的表示分离到他们自己的对象中,包括我自己。就个人而言,如果我想避免依赖性,我可能会这样建模: