0

我正在通过 JSON 将包含两个节点“消息”和“发件人”的列表从 webService 发送到 android 设备,现在我想将发件人和消息分开,然后在 TextView 中显示它们

网络服务

[WebMethod]
    public string GetMessage(String receiver)
     {
      try
      {
        con.Open();
        SqlCommand myCommand = new SqlCommand();
        myCommand.Connection = con;
        myCommand.CommandText = "SELECT message, sender FROM [Messages] WHERE receiver = '" + receiver + "'";

        SqlDataReader reader;

        reader = myCommand.ExecuteReader();

        List<string> message = new List<string>();

        if (reader.HasRows)
        {
            while (reader.Read())
            {
                message.Add (Convert.ToString(reader["sender"]));
                message.Add  (Convert.ToString(reader["message"]));
            }
        }
        else
        {
            return USER_NOT_EXIST_CODE;
        }

        var json = new JavaScriptSerializer().Serialize(message);
       return json.ToString();

    }

主要活动

   protected void onPostExecute(String params) {
        super.onPostExecute(params);
        progressDialog.dismiss();

        try {
            Log.v("XXX", params);
            JSONObject jsonObj = new JSONObject(params);

        message.setText(jsonObj.getString("message"));

            sender.setText(jsonObj.getString("sender"));

        } catch (JSONException e) {
            e.printStackTrace();
        } 

    }

当前的 LogCat

     ["0333                ","hi jigZ","0333                ","i am fine","0333                ","hi there"]
4

1 回答 1

1

有很多事情你需要考虑...

1)您正在从 json 访问“消息”“发件人”,而且有趣的是,您的 json 没有任何与它们相似的键......所以首先,创建一个合理的 json......可能是 JsonArray,JsonObjects 有发件人和消息。这可能看起来像这样......

[
  {"message":"some text...","sender":"123"},
  {"message":"some text...","sender":"456"},
  {"message":"some text...","sender":"789"}
]

这可以像这样使用NewtonsJson轻松生成表单对象。

List<Message> list = new List<Message>();
list.Add(new Message() { sender = "123", message = "some text..." });
list.Add(new Message() { sender = "456", message = "some text..." });
list.Add(new Message() { sender = "789", message = "some text..." });

string json = JsonConvert.SerializeObject(list);

Console.WriteLine(json);

其中“消息”是保存信息的简单类...

class Message
{
    public string message { get; set; }
    public string sender { get; set; }
}

2)现在在你的Android项目中为'Message'创建一个类似的类,你可以像这样轻松地解析它

private List<Message> decodeJson(String fromServer) {
    List<Message> list = new ArrayList<Message>();
    try {
        JSONArray jsAry = new JSONArray(fromServer);
        for (int i = 0; i < jsAry.length(); i++) {
            JSONObject jsObj = (JSONObject) jsAry.get(i);
            Message msg = new Message();
            msg.setSender(jsObj.getString("sender"));
            msg.setMessage(jsObj.getString("message"));
            list.add(msg);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    } 
    return list;
}

现在,您可以使用此消息列表做任何您想做的事情。您还可以在类中添加更多字段,例如“接收者”等。

希望这可以帮助...:)

于 2013-05-07T12:17:40.233 回答