【问题标题】:How to decode JSON values in my Android Aplication?如何在我的 Android 应用程序中解码 JSON 值?
【发布时间】:2014-07-06 17:17:29
【问题描述】:

大家好,我正在尝试将 JSON 值解码到我的 Android 应用程序中,但我不确定我在代码中做错了什么...

这是我的 PHP 文件:

<?php 

    ... 
    echo json_encode($mostrar_player);
    ...

?>

这会给我这样的回报:["1","Admin","123","Adm","messages","0"]

在我的 Android 应用程序中,我需要将该值放入一个数组中,在那里我可以选择分隔的值,但是如何?

这是我的 Android 代码:

        EditText campoLogin = (EditText)findViewById(R.id.campo_de_login);
        EditText campoSenha = (EditText)findViewById(R.id.campo_de_senha);

        toast("Conectando...");
        Conectar Conn = new Conectar("http://website/chat/login.php?login=" + campoLogin.getText() + "&senha=" + campoSenha.getText() );
        Log.i("-RESPOSTA-",Conn.response); 
        // HERE IN Conn.response I have my response ["1","Admin","Admin","Admin","affs","0"]

        String json_str = Conn.response;
        JSONObject json = new JSONObject(json_str);
        JSONArray jArray = json.getJSONArray("msg");

        //Log.i("JSON",json_data.getString("msg"));

【问题讨论】:

  • 程序到达后Log.i("-RESPOSTA-",Conn.response);它出现了错误,我得到了这个:java.lang.IllegalStateException:无法执行活动的方法
  • 我正在尝试将这个 ["1","Admin","123","Adm","messages","0"] 放入我可以管理的数组中。 :)
  • 您在主线程中运行 HTTP 请求,Android 不允许这样做。把它放在单独的线程中。

标签: php android json


【解决方案1】:

试试

 <?php   echo json_encode($mostra_player, JSON_FORCE_OBJECT); ?> 

强制成为一个对象。

然后你可以在java/android中使用

JSONObject obj = (JSONObject) new JSONTokener(json_string_output).nextValue();
String yourdata= obj.getString("yourdata");

如果你想要一个数组试试

<?php echo json_encode(array("data" => $mostra_player)); ?>

        JSONObject json = new JSONObject(responsedata);
        JSONArray jArray = json.getJSONArray("posts");
        for (int i = 0; i < jArray.length(); i++) {
            JSONObject e = jArray.getJSONObject(i);
            JSONObject jObject = new JSONObject(e.getString("data"));

            Log.d("yourdata", jObject.getString("yourdata"));
            Log.d("moredata", jObject.getString("moredata"));
        }

【讨论】:

  • 嘿兄弟!那行得通! :D 你现在是我的 php 向我返回这个:{"0":"1","1":"Admin","2":"1234","3":"Adm","4": "message","5":"0"} 与 0,1,2,3,4 e 5 我相信这是每列的数字,所以我更改了这一行: String yourdata = obj.getString("1" );获取第二列“Admin”^^
  • 如果您想要 JSON 中的数组,您应该考虑尝试 json_encode(array($mostra_player))。如果我的回答对你有帮助,别忘了点赞。谢谢
  • 如果我使用 $mostra_player)); ?> 它返回给我 {"data":null} D:
  • 看看它是怎样的:$query = "SELECT * FROM chat"; $res = mysql_query($query); $mostrar_player = mysql_fetch_row($res); echo json_encode(array("data" => $mostra_player));
  • 已修复。并且它是 mysql_fetch_array 来获得一个正确的数组而不是仅仅一行。
【解决方案2】:

您可以通过多种方式实现这一目标。

我个人喜欢在 Android 中使用内置的 JSON 解析器

JSONObject jObject = new JSONObject(result);

你也可以使用谷歌的 json 解析库 https://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html

有关如何实际解析 JSON 并获取可在程序中使用的字符串的详细信息,请参阅此链接。 How to parse JSON in Android

【讨论】:

  • Bob,看来他已经在使用 JSON 库了,否则他不会有 getJsonArray() 之类的方法。它似乎是 json.org 解析器,这意味着我的答案是将 json 数据从 php 解析为 java 的正确方法。
【解决方案3】:

我会尽量回答:-

  1. 根据您的代码,您有这个字符串 ["1","Admin","123","Adm","messages","0"],这显然是一个 jsonarray,但您在 android 中解析为 jsonobject。

  2. 正如@Boban 所说,您不能在主线程上运行网络操作,因此请避免使用 dat。

现在将响应作为我在 1 中提到的内容,您将如何做:-

JSONArray jArray=new JSONArray(json_str)
String id=jArray.getString(0);
String admin=jArray.getString(1);
.
.
.

希望对您有所帮助...如果我错了,请纠正我:)

谢谢

【讨论】:

  • 嘿,这也成功了,实际上它看起来更容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-16
相关资源
最近更新 更多