Php JSON异常:字符串类型的值无法转换为JSON对象?
我在尝试运行以下代码时遇到此错误,这是一个简单的登录/upPhp JSON异常:字符串类型的值无法转换为JSON对象?,php,android,mysql,json,Php,Android,Mysql,Json,我在尝试运行以下代码时遇到此错误,这是一个简单的登录/upAndroid活动,链接到PHP脚本和MYSQL数据库,托管在00WebHost上 我如何解决这个问题?注意:这将停止正在填充的数据库 单击提交按钮时: public void onClick(View v) { // get The User name and Password String userName=editTextUserName.getText().toS
Android
活动,链接到PHP
脚本和MYSQL
数据库,托管在00WebHost
上
我如何解决这个问题?注意:这将停止正在填充的数据库
单击提交按钮时:
public void onClick(View v) {
// get The User name and Password
String userName=editTextUserName.getText().toString();
String password=editTextPassword.getText().toString();
// WebServer Request URL
String serverURL = "http://ry.net16.net/login_web_service.php?username=" + userName + "&password=" + password;
// Use AsyncTask execute Method To Prevent ANR Problem
new LongOperation().execute(serverURL);
Log.d("trace url", "URL TRACE");
{
}
{
}
}
});
private class LongOperation extends AsyncTask<String, Void, Void> {
// Required initialization
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(SignInActivity.this);
String data ="";
int sizeData = 0;
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//Start Progress Dialog (Message)
Dialog.setMessage("Please wait..");
Dialog.show();
}
// Call after onPreExecute method
protected Void doInBackground(String... urls) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
// Send data
try
{
// Defined URL where to send data
URL url = new URL(urls[0]);
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "");
}
// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
/*****************************************************/
return null;
}
protected void onPostExecute(Void unused) {
// NOTE: You can call UI Element here.
// Close progress dialog
Dialog.dismiss();
if (Error != null) {
// uiUpdate.setText("Output : "+Error);
} else {
// Show Response Json On Screen (activity)
// uiUpdate.setText( Content );
/****************** Start Parse Response JSON Data *************/
String OutputData = "";
JSONObject jsonResponse;
try {
/****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
jsonResponse = new JSONObject(Content);
String result = jsonResponse.get("result").toString();
if (result.equals("true"))
{
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
/**************** Storing data as KEY/VALUE pair *******************/
editor.putBoolean("loggedIn", true); // Saving boolean - true/false
// Save the changes in SharedPreferences
editor.commit(); // commit changes
Toast.makeText(SignInActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
Intent i = new Intent(SignInActivity.this , MainActivity.class);
startActivity(i);
}
else
{
Toast.makeText(SignInActivity.this, "User Name or Password does not match. Please Sign Up if you are new. ", Toast.LENGTH_LONG).show();
}
}
/****************** End Parse Response JSON Data *************/
catch (JSONException e) {
e.printStackTrace();
}
}
}
}
08-15 18:24:59.117: W/System.err(29260): org.json.JSONException: Value <br><table of type java.lang.String cannot be converted to JSONObject
08-15 18:24:59.117: W/System.err(29260): at org.json.JSON.typeMismatch(JSON.java:111)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:159)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:172)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:160)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:1)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.finish(AsyncTask.java:632)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-15 18:24:59.117: W/System.err(29260): at android.os.Handler.dispatchMessage(Handler.java:102)
08-15 18:24:59.127: W/System.err(29260): at android.os.Looper.loop(Looper.java:157)
08-15 18:24:59.127: W/System.err(29260): at android.app.ActivityThread.main(ActivityThread.java:5356)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invoke(Method.java:515)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
08-15 18:24:59.127: W/System.err(29260): at dalvik.system.NativeStart.main(Native Method)
08-15 18:24:59.147: E/ViewRootImpl(29260): sendUserActionEvent() mView == null
长操作类:
public void onClick(View v) {
// get The User name and Password
String userName=editTextUserName.getText().toString();
String password=editTextPassword.getText().toString();
// WebServer Request URL
String serverURL = "http://ry.net16.net/login_web_service.php?username=" + userName + "&password=" + password;
// Use AsyncTask execute Method To Prevent ANR Problem
new LongOperation().execute(serverURL);
Log.d("trace url", "URL TRACE");
{
}
{
}
}
});
private class LongOperation extends AsyncTask<String, Void, Void> {
// Required initialization
private final HttpClient Client = new DefaultHttpClient();
private String Content;
private String Error = null;
private ProgressDialog Dialog = new ProgressDialog(SignInActivity.this);
String data ="";
int sizeData = 0;
protected void onPreExecute() {
// NOTE: You can call UI Element here.
//Start Progress Dialog (Message)
Dialog.setMessage("Please wait..");
Dialog.show();
}
// Call after onPreExecute method
protected Void doInBackground(String... urls) {
/************ Make Post Call To Web Server ***********/
BufferedReader reader=null;
// Send data
try
{
// Defined URL where to send data
URL url = new URL(urls[0]);
// Send POST data request
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write( data );
wr.flush();
// Get the server response
reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line = null;
// Read Server Response
while((line = reader.readLine()) != null)
{
// Append server response in string
sb.append(line + "");
}
// Append Server Response To Content String
Content = sb.toString();
}
catch(Exception ex)
{
Error = ex.getMessage();
}
finally
{
try
{
reader.close();
}
catch(Exception ex) {}
}
/*****************************************************/
return null;
}
protected void onPostExecute(Void unused) {
// NOTE: You can call UI Element here.
// Close progress dialog
Dialog.dismiss();
if (Error != null) {
// uiUpdate.setText("Output : "+Error);
} else {
// Show Response Json On Screen (activity)
// uiUpdate.setText( Content );
/****************** Start Parse Response JSON Data *************/
String OutputData = "";
JSONObject jsonResponse;
try {
/****** Creates a new JSONObject with name/value mappings from the JSON string. ********/
jsonResponse = new JSONObject(Content);
String result = jsonResponse.get("result").toString();
if (result.equals("true"))
{
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE);
Editor editor = pref.edit();
/**************** Storing data as KEY/VALUE pair *******************/
editor.putBoolean("loggedIn", true); // Saving boolean - true/false
// Save the changes in SharedPreferences
editor.commit(); // commit changes
Toast.makeText(SignInActivity.this, "Congrats: Login Successfull", Toast.LENGTH_LONG).show();
Intent i = new Intent(SignInActivity.this , MainActivity.class);
startActivity(i);
}
else
{
Toast.makeText(SignInActivity.this, "User Name or Password does not match. Please Sign Up if you are new. ", Toast.LENGTH_LONG).show();
}
}
/****************** End Parse Response JSON Data *************/
catch (JSONException e) {
e.printStackTrace();
}
}
}
}
08-15 18:24:59.117: W/System.err(29260): org.json.JSONException: Value <br><table of type java.lang.String cannot be converted to JSONObject
08-15 18:24:59.117: W/System.err(29260): at org.json.JSON.typeMismatch(JSON.java:111)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:159)
08-15 18:24:59.117: W/System.err(29260): at org.json.JSONObject.<init>(JSONObject.java:172)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:160)
08-15 18:24:59.117: W/System.err(29260): at com.hmkcode.android.sign.SignUpActivity$LongOperation.onPostExecute(SignUpActivity.java:1)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.finish(AsyncTask.java:632)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask.access$600(AsyncTask.java:177)
08-15 18:24:59.117: W/System.err(29260): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
08-15 18:24:59.117: W/System.err(29260): at android.os.Handler.dispatchMessage(Handler.java:102)
08-15 18:24:59.127: W/System.err(29260): at android.os.Looper.loop(Looper.java:157)
08-15 18:24:59.127: W/System.err(29260): at android.app.ActivityThread.main(ActivityThread.java:5356)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 18:24:59.127: W/System.err(29260): at java.lang.reflect.Method.invoke(Method.java:515)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
08-15 18:24:59.127: W/System.err(29260): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
08-15 18:24:59.127: W/System.err(29260): at dalvik.system.NativeStart.main(Native Method)
08-15 18:24:59.147: E/ViewRootImpl(29260): sendUserActionEvent() mView == null
试试这个:
String serverURL = "http://ry.net16.net/login_web_service.php?username=" + URLEncoder.encode(userName) + "&password=" + URLEncoder.encode(password);
问题在于非JSON字符串
什么是 “+userName+”&password=“+password” 如果这不是JSON输出,那么您需要检查URL为什么没有提供JSON格式的文本
请发布URL的输出。您对该PHP脚本有严重问题,我刚刚在浏览器中打开该URL,并看到了大量错误。因此,简而言之,PHP脚本没有返回任何
JSON
,它给您的HTML
,这只是所有PHP警告…您收到此错误是因为您没有获取实际的JSON编码响应。如其他回答中所述,您在尝试连接到数据库时遇到错误:
警告:mysql_connect()[function.mysql connect]:不允许主机“srv36.000webhost.com”在第14行的/home/a5369581/public_html/login_web_service.php中连接到此mysql服务器
您需要确保,
$mysql\u用户
在mysql数据库上设置了适当的权限。如果php脚本位于000webhost服务器上,该服务器也托管您的sql server,那么您应该能够使用在成员区域的000webhost仪表板上提供的登录凭据。我发现了这个问题,而且它相当复杂问题是,基本上我没有使用正确的登录MYSQL数据库的详细信息。
您的字符串不是有效的json。检查服务器响应可以发布json吗?您可以发布一些用户和pwd吗?json在LongOperation类中。我的json解析器类也显示在EDIT中。这还没有解决问题,im get同样的错误JSON在LongOperation类中?很抱歉,我对使用JSON和phpy非常陌生。您的php有6个错误。请修复它。选择:“从登录中选择*用户名=”、“$UserName.”和密码=”、“$Password.”“URL的输出是空的,它没有给出任何正确的结果,因此问题在于PHP代码,它应该返回格式化的响应。尝试调试//返回json响应echo json_encode(数组(“结果”=>$flag));这可能是脚本与MYSQL数据库连接的问题吗?是的,调试json_encode(数组(“Apple”、“Banana”、“Pear”));而是检查结果是否有问题。谢谢,我怎么知道ry.net16.net/login\u web\u service.php?URL的地址正确吗?@codeme2020,首先你需要修复你的PHP,它现在已经坏了。好的,不幸的是我对PHP不是很确定,这是我第一次尝试使用它。如何修复?您的MySQL用户名/密码有问题。您的脚本无法连接到数据库是的,这与我使用的Web主机有关吗?我几乎可以肯定这个脚本和安卓系统的活动都是好的,看起来你对PHP和安卓系统都是新手。我想请你在尝试将两者结合在一起之前,先阅读一下。谢谢,我怎么知道?URL的地址是否正确?