【发布时间】:2012-07-29 04:08:34
【问题描述】:
在安卓上需要帮助。一直有这个错误Error Parsing data org.json.JSONException: Value <html> of type java.lang.String cannot be converted to JSONObject
下面是我运行时出现错误的页面。
public class Login extends Activity {
//URL to get User Data
private static String URL_GET = "http://10.0.2.2/android_connect/get_authentication.php";
// JSON Node names
private static final String TAG_SUCCESS = "success";
private static final String TAG_USERS = "Users";
private static final String TAG_EMAIL = "Email";
private static final String TAG_PASSWORD = "Password";
JSONParser jParser = new JSONParser();
String dbPassword = null;
// users JSONArray
JSONArray Users = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setting default screen to login.xml
setContentView(R.layout.login);
Button btn = (Button) findViewById(R.id.btnLogin);
// Listening to register new account link
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String password = ((EditText) findViewById(R.id.password)).getText().toString();
new getAuthentication().execute();
if (password.equals(dbPassword)) {
// Switching to Main screen
Intent i = new Intent(getApplicationContext(), EchoSphere.class);
startActivity(i);
}
}
});
}
class getAuthentication extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... params) {
runOnUiThread(new Runnable() {
public void run() {
// Check for success tag
int success;
try {
String email = ((EditText) findViewById(R.id.email)).getText().toString();
Log.d("email:", email);
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(TAG_EMAIL, email));
JSONObject json = jParser.makeHttpRequest(URL_GET, "GET", params);
Log.d("Password:", json.toString());
success = json.getInt(TAG_SUCCESS);
if (success == 1) {
Users = json.getJSONArray(TAG_USERS);
JSONObject c = Users.getJSONObject(0);
dbPassword = c.getString(TAG_PASSWORD);
Log.d("DBPW:", dbPassword);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
});
return null;
}
}
}
这是 PHP 脚本,我已经验证了 PHP,它显示可以正常工作。
<?php
// array for JSON response
$response = array();
// include db connect class
require_once __DIR__ . '/db_connect.php';
// connecting to db
$db = new DB_CONNECT();
// check for post data
if (isset($_GET["Email"])) {
$email = $_GET['Email'];
// get a product from products table
$result = mysql_query("SELECT Email, Password FROM Users WHERE Email = '$email'");
if (!empty($result)) {
// check for empty result
if (mysql_num_rows($result) > 0) {
$result = mysql_fetch_array($result);
$user[] = array();
$user["Email"] = $result["Email"];
$user["Password"] = $result["Password"];
// user node
$response["Users"] = array();
array_push($response["Users"], $user);
// success
$response["success"] = 1;
// echoing JSON response
echo json_encode($response);
} else {
// no product found
$response["success"] = 0;
$response["message"] = "No User found";
// echo no users JSON
echo json_encode($response);
}
} else {
// no product found
$response["success"] = 0;
$response["message"] = "No User found";
// echo no users JSON
echo json_encode($response);
}
} else {
// required field is missing
$response["success"] = 0;
$response["message"] = "Required field(s) is missing";
// echoing JSON response
echo json_encode($response);
}
?>
结果如图
{"Users":[{"0":[],"Email":"1","Password":"123"}],"success":1}
我不知道错误出在哪里。
【问题讨论】:
-
如果你查看源/打印出10.0.2.2/android_connect/get_authentication.php的结果,除了JSON还有什么吗?
-
除了 JSON 之外什么都没有出现
-
我认为来自服务器的响应是一个 html 错误页面,这就是您收到 json 解析错误的原因
-
当我运行页面时,我的 logcat 会显示电子邮件。我感觉错误发生在 JSONObject json = jParser.makeHttpRequest(URL_GET, "GET", params);因为 logcat 没有显示检索到的密码
-
PHP 或服务器设置错误。我认为@thujeevan 对 HTML 错误页面的建议是最有可能的答案,请查看服务器访问/错误日志以了解服务器在收到请求时实际返回的内容以及是否有任何有用的错误消息。跨度>
标签: php android mysql json parsing