java — чтение json с URL (Android)

Извините за мой английский. Я никак не могу отобразить данные, которые взяты из ссылки json. Как много примеров в Интернете, но я не могу понять, в чем ошибка. Я думаю, что это не правильные файлы php, хотя это может быть. Я прошу вас, программисты помогают понять, почему приложение не работает. Ниже я привел все файлы:
Рабочая json ссылка, с которой я пытаюсь прочитать данные http://ksupulse.tk/get_all.php

db_config.php

    <?php
define('DB_USER', "login");
define('DB_PASSWORD', "pass");
define('DB_DATABASE', "database");
define('DB_SERVER', "server");
?>

db_connect.php

<?php

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

// constructor
function __construct() {
// connecting to database
$this->connect();
}

// destructor
function __destruct() {
// closing db connection
$this->close();
}

/**
* Function to connect with database
*/
function connect() {
// import database connection variables
require_once __DIR__ . '/db_config.php';

// Connecting to mysql database
$con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error());

// Selecing database
$db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error());

// returing connection cursor
return $con;
}

/**
* Function to close db connection
*/
function close() {
// closing db connection
mysql_close();
}

}

?>

get_all.php

<?php
header('Content-Type: application/json; charset=utf-8');$response = array();

require 'db_connect.php';

$db = new DB_CONNECT();

$result = mysql_query("SELECT * FROM demo") or die(mysql_error());

if (mysql_num_rows($result) > 0) {
$response["demo"] = array();

while ($row = mysql_fetch_array($result)) {
$product = array();
$product["id"] = $row["id"];
$product["name"] = $row["name"];
$product["detaly"] = $row["detaly"];

array_push($response["demo"], $product);
}
$response["success"] = 1;echo json_encode($response);} else {
$response["success"] = 0;
$response["message"] = "No products found";

echo json_encode($response);
}
?>

Файлы Android:

Основная деятельность

 public class MainActivity extends Activity {

//URL to get JSON Array
private static String url = "http://ksupulse.tk/get_all.php";

//JSON Node Names
private static final String TAG_USER = "detaly";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_EMAIL = "email";

JSONArray user = null;@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

// Creating new JSON Parser
JSONParser jParser = new JSONParser();

// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl(url);

try {
// Getting JSON Array
user = json.getJSONArray(TAG_USER);
JSONObject c = user.getJSONObject(0);

// Storing  JSON item in a Variable
String id = c.getString(TAG_ID);
String name = c.getString(TAG_NAME);
String email = c.getString(TAG_EMAIL);

//Importing TextView
final TextView uid = (TextView)findViewById(R.id.uid);
final TextView name1 = (TextView)findViewById(R.id.name);
final TextView email1 = (TextView)findViewById(R.id.email);

//Set JSON Data in TextView
uid.setText(id);
name1.setText(name);
email1.setText(email);} catch (JSONException e) {
e.printStackTrace();
}}

JSONParser

public class JSONParser {

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

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url) {

// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);

HttpResponse httpResponse = httpClient.execute(httpPost);
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, "utf-8"), 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;

}
}

Это то, что меня беспокоит по ошибке:

11-22 18:37:57.448: E/JSON Parser(1850): Error parsing data org.json.JSONException: Value  of type java.lang.String cannot be converted to JSONObject

Все ошибки:

11-22 18: 37: 54.748: E / Trace (1850): ошибка при открытии файла трассировки: нет такого
файл или каталог (2) 11-22 18: 37: 57.448: анализатор E / JSON (1850): ошибка
парсинг данных org.json.JSONException: значение типа java.lang.String
не может быть преобразован в JSONObject 11-22 18: 37: 57.448:
D / AndroidRuntime (1850): выключение ВМ 11-22 18: 37: 57.460:
W / dalvikvm (1850): threadid = 1: поток завершается с необработанным исключением
(группа = 0xa6265288) 11-22 18: 37: 57.468: E / AndroidRuntime (1850): FATAL
ИСКЛЮЧЕНИЕ: главное 11-22 18: 37: 57.468: E / AndroidRuntime (1850):
java.lang.RuntimeException: Невозможно начать деятельность
ComponentInfo {learn2crack.jsonparsing / learn2crack.jsonparsing.MainActivity}:
java.lang.NullPointerException 11-22 18: 37: 57.468:
E / AndroidRuntime (1850): в
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2059)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.ActivityThread.access $ 600 (ActivityThread.java:130) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1195)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
android.os.Handler.dispatchMessage (Handler.java:99) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
android.os.Looper.loop (Looper.java:137) 11-22 18: 37: 57.468:
E / AndroidRuntime (1850): в
android.app.ActivityThread.main (ActivityThread.java:4745) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
java.lang.reflect.Method.invokeNative (родной метод) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
java.lang.reflect.Method.invoke (Method.java:511) 11-22 18: 37: 57.468:
E / AndroidRuntime (1850): в
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
dalvik.system.NativeStart.main (собственный метод) 11-22 18: 37: 57.468:
E / AndroidRuntime (1850): вызвано: java.lang.NullPointerException
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
learn2crack.jsonparsing.MainActivity.onCreate (MainActivity.java:43)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.Activity.performCreate (Activity.java:5008) 11-22
18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1079)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): в
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2023)
11-22 18: 37: 57.468: E / AndroidRuntime (1850): … еще 11 11-22
18: 57: 04.626: E / JSON Parser (1888): ошибка при разборе данных
org.json.JSONException: значение типа java.lang.String не может быть
преобразован в JSONObject 11-22 18: 57: 04.626: D / AndroidRuntime (1888):
Выключение VM 11-22 18: 57: 04.626: W / dalvikvm (1888): threadid = 1:
выход из потока с неперехваченным исключением (группа = 0xa6265288) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 11-22
18: 57: 04.626: E / AndroidRuntime (1888): java.lang.RuntimeException:
Невозможно начать деятельность
ComponentInfo {learn2crack.jsonparsing / learn2crack.jsonparsing.MainActivity}:
java.lang.NullPointerException 11-22 18: 57: 04.626:
E / AndroidRuntime (1888): в
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2059)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2084)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.ActivityThread.access $ 600 (ActivityThread.java:130) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1195)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
android.os.Handler.dispatchMessage (Handler.java:99) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
android.os.Looper.loop (Looper.java:137) 11-22 18: 57: 04.626:
E / AndroidRuntime (1888): в
android.app.ActivityThread.main (ActivityThread.java:4745) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
java.lang.reflect.Method.invokeNative (родной метод) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
java.lang.reflect.Method.invoke (Method.java:511) 11-22 18: 57: 04.626:
E / AndroidRuntime (1888): в
com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:786)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:553) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
dalvik.system.NativeStart.main (собственный метод) 11-22 18: 57: 04.626:
E / AndroidRuntime (1888): вызвано: java.lang.NullPointerException
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
learn2crack.jsonparsing.MainActivity.onCreate (MainActivity.java:43)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.Activity.performCreate (Activity.java:5008) 11-22
18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1079)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): в
android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2023)
11-22 18: 57: 04.626: E / AndroidRuntime (1888): … еще 11

0

Решение

  1. http://ksupulse.tk/get_all.php не работает, и трассировка стека показывает «Нет такого файла», поэтому убедитесь, что вы передаете правильную ссылку.
  2. Используйте веб-сайт, такой как http://www.jsoneditoronline.org/ чтобы точно увидеть, что возвращается. Ошибка в вашем классе MainActivity при анализе JSON. Msgstr «Ошибка разбора данных org.json.JSONException: значение типа java.lang.String не может быть преобразовано в JSONObject». Ваша строка JSONObject c = user.getJSONObject (0); нужна строка, переданная вместо «0.»

Дополнительный комментарий:
Не рекомендуется делать сетевые вызовы в главном потоке в Android. Используйте AsyncTask.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector