2014-09-03 3 views
0

Я пытаюсь получить одну строку из файла 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  

java.lang.String cannot be converted to JSONObject 

Я знаю, что эта ошибка была решена во многих вопросах на Stackoverflow и я перепробовал все решения:

  1. Использование UTF-8 в каждом документе
  2. подстрока() каждая строка
  3. ...

Между тем, я думаю, что это проблема «кода», что-то должно быть неправильно.

Все кодовые части из этого учебника:

tutorial

Пожалуйста, обратите внимание на:

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 деятельности с использованием строки

Я благодарен за любые советы (:

+0

В java-коде распечатать 'result' и посмотреть, какие чудеса у вас там есть. – Simas

+0

Хорошо, Logcat показывает «29», и это именно то, что должно быть. –

+0

Умм, нет, это не так. – Simas

ответ

0

Изменить

$new=$zeile["Coins"]; 

в

$new = $zeile; 

Затем в Java, чтобы прочитать это вам нужно:

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

Также убедитесь, что полученный ответ является "Coins" : "29" не "Coins" : 29.

+0

Спасибо, ты сделал мой день;) –

+0

@ user3826600 happy ^^ – Simas

1

Похоже, что ваша переменная result недействительна JSONObject, так как она просто содержит String «29».

В PHP json_encode только действительно работает на объекты и массивы, поэтому я хотел бы добавить $new переменную объекта или массива, а затем на клиенте Android, либо создать new JSONObject(result) или new JSONArray(result) в зависимости от структуры данных, которую вы выбрали для json_encode

+0

спасибо, но ответ пользователя3249477 решает проблему. –

+0

$ zeile на самом деле является php-объектом, поэтому он работает :) – nyx

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