2015-06-03 188 views
0

我试图开发一个android应用程序,它将连接到外部服务器以获取数据。我已经用我的.php文件成功读取了数据,但是我无法在我的应用程序中使用它,因为它会引发错误。解析DB JSON时出错

<?php 

/** 
* A class file to connect to database 
*/ 


// connect to database 
try { 
$pdo = new PDO('mysql:host=localhost;dbname=myDBname',' user', 'pass'); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
} catch(PDOException $err) { 
die($err->getMessage()); 
} 

$stmt = $pdo->prepare("select * from Test"); 


$result = $stmt->execute(); 
print_r($stmt->fetchAll(PDO::FETCH_ASSOC)); 

?> 

这就是我用来读取数据的php代码。这是我在Android Studio中

protected String doInBackground(String... args) { 
      // Building Parameters 
      List params = new ArrayList(); 
      // getting JSON string from URL 

      JSONObject json = jParser.makeHttpRequest(server_php_url, "GET", params); 
      // Check your log cat for JSON reponse 
      Log.d("All Products: ", json.toString()); 

      try { 
       // Checking for SUCCESS TAG 
       int success = json.getInt(TAG_SUCCESS); 

       if (success == 1) { 
        // products found 
        // Getting Array of Products 
        products = json.getJSONArray(TAG_PRODUCTS); 

        // looping through All Products 
        //Log.i("ramiro", "produtos.length" + products.length()); 
        for (int i = 0; i < products.length(); i++) { 
         JSONObject c = products.getJSONObject(i); 

         // Storing each json item in variable 

         String name = c.getString(TAG_NAME); 

         // creating new HashMap 
         HashMap map = new HashMap(); 

         // adding each child node to HashMap key => value 

         map.put(TAG_NAME, name); 

         empresaList.add(map); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      return null; 
} 

使用代码这是JSONParser类:

public class JSONParser { 

    static InputStream is = null; 
    static JSONObject jObj = null; 
    static String json = ""; 

    // constructor 
    public JSONParser() { 

    } 

    // function get json from url 
    // by making HTTP POST or GET mehtod 
    public JSONObject makeHttpRequest(String url, String method, 
             List params) { 

     // Making HTTP request 
     try { 

      // check for request method 
      if(method == "POST"){ 
       // request method is POST 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 

       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      }else if(method == "GET"){ 
       // request method is GET 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       String paramString = URLEncodedUtils.format(params, "utf-8"); 
       url += "?" + paramString; 
       HttpGet httpGet = new HttpGet(url); 

       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      } 


     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

    } 
} 

这是JSON的结果: 阵列([0] =>数组([测试] = > Name1)[1] => Array([Name] => Name2))

错误信息: E/JSON解析器:解析数据时出错org.json.JSONException:Value java.lang.String类型的数组无法转换为JSONObject

我真的需要帮助。 预先感谢您。

+0

上面的输出不是json。 JSON是'[{“Test”:“Name1”},{“Name”:“Name2”}]'。试试'json_encode'PHP函数。 – mp911de

+0

那么,我该怎么做呢? $ var = json_encode($ result),然后打印$ var? – jk93

+0

我试图对结果进行编码,但它没有写入“true”。 – jk93

回答

0

在返回变量使用json_decode(),您将获得以JSON格式输出DO 作为

return json_decode(jObj); 
+0

我应该在哪里使用该代码? – jk93

0

Retrun JSON对象在后台方法

protected String doInBackground(String... args) { 
     // Building Parameters 
     List params = new ArrayList(); 
     // getting JSON string from URL 

     JSONObject json = jParser.makeHttpRequest(server_php_url, "GET", params); 
     // Check your log cat for JSON reponse 
     Log.d("All Products: ", json.toString()); 

     try { 
      // Checking for SUCCESS TAG 
      int success = json.getInt(TAG_SUCCESS); 

      if (success == 1) { 
       // products found 
       // Getting Array of Products 
       products = json.getJSONArray(TAG_PRODUCTS); 

       // looping through All Products 
       //Log.i("ramiro", "produtos.length" + products.length()); 
       for (int i = 0; i < products.length(); i++) { 
        JSONObject c = products.getJSONObject(i); 

        // Storing each json item in variable 

        String name = c.getString(TAG_NAME); 

        // creating new HashMap 
        HashMap map = new HashMap(); 

        // adding each child node to HashMap key => value 

        map.put(TAG_NAME, name); 

        empresaList.add(map); 
       } 
      } 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
     return json; 
+0

如果我这样做,即时返回JSONObject而不是字符串。 – jk93

0

据我所知JSONParser类中引发错误的最具体方法如下:

try { 
      jObj = new JSONObject(json); 


     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

I ha ve最终将输出编码为[{“Test”:“Name1”}] ,现在我的错误更改为 解析数据org.json.JSONException时出错:值[{“Test”:“Name1”}]类型org .json.JSONArray无法转换为JSONObject

我会apreciate,如果你可以发布与mysql相同的.php代码,因为我试图写它,但它说“mysql被弃用”,我不知道该怎么做与mysqli。