2015-06-03 3 views
0

Im пытается разработать приложение для 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: Array ([0] => Array ([Test] = > Имя1) [1] => Array ([имя] => Имя2))

ошибка: Е/JSON синтаксического анализа: ошибка синтаксического анализа org.json.JSONException данные: Массив значений типа java.lang.String не могут быть преобразованы в JSONObject

Мне очень нужна помощь. Спасибо заранее.

+0

Выход выше не json. JSON is '[{" Test ":" Name1 "}, {" Name ":" Name2 "}]'. Попробуйте функцию PHP json_encode. – mp911de

+0

Итак, как мне это сделать? $ var = json_encode ($ result), а затем напечатать $ var? – jk93

+0

Я пытался кодировать результат, но он пишет только «true» без ». – jk93

ответ

0

В возвратном переменной используйте json_decode(), вы получите вывод в формате JSON как

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: Value [{"Test": "Name1"}] типа org .json.JSONArray не может быть преобразован в JSONObject

Я бы предпочел, если бы вы могли опубликовать тот же .php-код с mysql, потому что я пытался его написать, но он говорит: «mysql устарел», и я не знаю, как это сделать с mysqli.

Смежные вопросы