Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.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
Php 从JSON获取数据会导致崩溃_Php_Android_Mysql_Json - Fatal编程技术网

Php 从JSON获取数据会导致崩溃

Php 从JSON获取数据会导致崩溃,php,android,mysql,json,Php,Android,Mysql,Json,我尝试从JSON文件中获取单个字符串 此文件使用存储在MySql数据库中的数据 以下logcat显示了该问题: 09-03 20:05:04.825: E/pass 1(27476): connection success 09-03 20:05:04.825: E/pass 2(27476): connection success 09-03 20:05:04.830: E/Fail 3(27476): org.json.JSONException: Value 29 of type

我尝试从JSON文件中获取单个字符串

此文件使用存储在MySql数据库中的数据

以下logcat显示了该问题:

09-03 20:05:04.825: E/pass 1(27476): connection success 
09-03 20:05:04.825: E/pass 2(27476): connection success 
09-03 20:05:04.830: E/Fail 3(27476): org.json.JSONException: Value 29 of type       

java.lang.String cannot be converted to JSONObject
我知道Stackoverflow的许多问题都解决了这个错误,我尝试了所有的解决方案:

  • 在每个文档中使用UTF-8
  • substring()每个字符串
  • 同时我认为这是一个“代码”问题,一定是出了什么问题

    所有代码部分均来自本教程:

    请看一看:

    Android活动:

       > try
        {
        HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost("http://myserver/msqlup.php");
            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
            HttpResponse response = httpclient.execute(httppost); 
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
            Log.e("pass 1", "connection success ");
     }
         catch(Exception e)
     {
            Log.e("Fail 1", e.toString());
            Toast.makeText(getApplicationContext(), "Invalid IP Address",
            Toast.LENGTH_LONG).show();
    }     
    
        try
        {
            BufferedReader reader = new BufferedReader
                (new InputStreamReader(is,"utf-8"),8);
                StringBuilder sb = new StringBuilder();
                while ((line = reader.readLine()) != null)
        {
                sb.append(line + "\n");
            }
                is.close();
                result = sb.toString();
            Log.e("pass 2", "connection success ");
    }
        catch(Exception e)
        {
        Log.e("Fail 2", e.toString());
    }     
    
    try
        {
            JSONObject json_data = new JSONObject(result);
             String name=(json_data.getString("$new"));
        Toast.makeText(getBaseContext(), "Name : "+name,
            Toast.LENGTH_SHORT).show();
        }
        catch(Exception e)
        {
            Log.e("Fail 3", e.toString());
        }
    }
    
    msqlup.php

    <?php
    $host='localhost';
    $uname='myname';
    $pwd='mypw';
    $db="mydb";
    
    $con = mysql_connect($host,$uname,$pwd) or die("connection failed");
    mysql_select_db($db,$con) or die("db selection failed");
    
    
    
    $r=mysql_query("SELECT Coins from table WHERE new= 1234567");
     $abfrage = "
    SELECT
     Coins
    FROM
     lunation";
    
    
    $ergebnis = mysql_query($abfrage) OR die(mysql_error());
    
    
    while($zeile = mysql_fetch_assoc($ergebnis)){
     $new=$zeile["Coins"];
    
      }
    
     print(json_encode($new));
    
    
     ?>
    
    
    
    这就是我想要做的: 1.从数据库“表”中获取“硬币”的值 2.使用字符串将其保存到Android活动中


    非常感谢您的任何建议(:

    您的
    结果
    变量似乎不是有效的
    JSONObject
    ,因为它只包含
    字符串
    “29”

    在PHP
    json\u encode
    中,只对对象和数组有效,因此我会将
    $new
    变量添加到对象或数组中,然后在Android客户端上,创建
    新JSONObject(result)
    新JSONArray(result)
    根据您选择的数据结构进行
    json\u编码

    更改

    $new=$zeile["Coins"];
    

    然后,在java中,要阅读本文,您需要:

    String name = json_data.getString("Coins");
    

    还要确保收到的响应是
    “Coins”:“29”
    而不是
    “Coins”:29

    在java代码中打印出
    结果
    ,然后看看你有什么奇怪的地方。好的,Logcat显示“29”,这正是它应该的样子..更改
    Log.e(“Fail 3”,e.toString())
    for
    Log.e(“result:,result”);
    对不起,这是“29”,但左引号有另一种风格,右引号o.0这本教程很糟糕。没有一个参数是参数,而且它充满了。
    mysql\u query
    是一个过时的接口,不应该在新的应用程序中使用,并且将在未来的PHP版本中删除。这是一个现代的替代品,就像。如果您对PHP不熟悉e like可以帮助解释最佳实践。谢谢,你让我开心;)$zeile实际上是一个php对象,这就是它工作的原因:)
    String name = json_data.getString("Coins");