[英]Read json from 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 Parser(1850):解析数据组织错误.json.JSONException:无法将类型为java.lang.String的值转换为JSONObject 11-22 18:37:57.448:D / AndroidRuntime(1850):关闭VM 11-22 18:37:57.460:W / dalvikvm( 1850):threadid = 1:线程以未捕获的异常退出(group = 0xa6265288)11-22 18:37:57.468:E / AndroidRuntime(1850):致命异常:主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.acc ess $ 600(ActivityThread.java:130)11-22 18:37:57.468:E / AndroidRuntime(1850):at 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) :at java.lang.reflect.Method.invokeNative(本地方法)11-22 18:37:57.468:E / AndroidRuntime(1850):at 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):在learning2crack.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:线程退出且未捕获异常(group = 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):at 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.invokeNativ e(本机方法)11-22 18:57:04.626:E / AndroidRuntime(1888):at 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):at dalvik.system.NativeStart.main(Native Method)11-22 18:57:04.626:E / AndroidRuntime (1888):由以下原因引起:java.lang.NullPointerException 11-22 18:57:04.626:E / AndroidRuntime(1888):在learning2crack.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个
旁注:在Android的主线程上进行网络调用不是一个好习惯。 使用AsyncTask。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.