0

i am sending a list with two nodes "message" and "sender" from a webService to an android device via JSON, now i want to separate the sender and message then display them in a TextView

Webservice

[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();

    }

MainActivity

   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();
        } 

    }

Current LogCat

     ["0333                ","hi jigZ","0333                ","i am fine","0333                ","hi there"]
BenMorel
  • 34,448
  • 50
  • 182
  • 322
AddyProg
  • 2,960
  • 13
  • 59
  • 110

1 Answers1

1

There are many things you need to consider...

1) You are accessing "message" and "sender" form the json, and interistingly, your json doesn't have any keys even similar to them...So first, create a reasonable json...probabaly JsonArray, with JsonObjects having sender and message. That might look like this...

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

This can be easily generated form objects using NewtonsJson like this.

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);

Where 'Message' is the simple class holding information...

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

2) Now Create a similar class in you Android project for 'Message' and you can easily parse this like

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;
}

And now, you can do any thing you want with this list of Message. You can also add more fields in you class like 'receiver' etc.

Hope this helps...:)

umair.ali
  • 2,714
  • 2
  • 20
  • 30