json - 值类型java.lang.String不能转换为JSONObject
我想登录我的应用程序,访问我的在线数据库,并检查我的输入是否已注册,但我得到此错误:Value <类型为java.lang.String的br不能转换为JSONObject。json - 值类型java.lang.String不能转换为JSONObject
我不知道为什么我的php代码返回< br />。 (我增加了<和br之间的空格以显示)
这是我的代码。
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.EditText;
import android.view.View;
import android.widget.Toast;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
public class login extends Activity {
Button btnLogIn;
Intent intent;
JSONObject jsonobject;
Button btnSignUp;
EditText txtUsername, txtPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
btnLogIn = (Button)findViewById(R.id.btnLogIn);
btnSignUp = (Button)findViewById(R.id.btnSignUp);
txtUsername = (EditText)findViewById(R.id.txtliusername);
txtPassword = (EditText)findViewById(R.id.txtlipassword);
// jsonobject = JSONfunctions.getJSONfromURL("http://sql18.hostinger.ph/phpmyadmin/index.php?db=u897407316_tret&lang=en&token=6afd355a23affd65cb4d05f814cc7921&phpMyAdmin=e2ba129883c7c52bc7e30fb543d3fa1095372c90");
}
public void gosignup(View view){
intent = new Intent(this, SignUp.class);
startActivity(intent);
}
public void gologin(View view){
String name = txtUsername.getText().toString();
String pw = txtPassword.getText().toString();
String type = "login";
if((name.trim().equals(""))||pw.trim().equals("")){
Toast.makeText(getApplicationContext(), "Please fill up all information", Toast.LENGTH_LONG).show();
}
else {
Toast.makeText(this, "Logging in...", Toast.LENGTH_SHORT).show();
new LogInAction(this).execute(name, pw);
// intent = new Intent(this, UserHomeDrawer.class);
//startActivity(intent);
}
}
}
LogInAction.java
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
/**
* Created by Camille on 11/13/2016.
*/
public class LogInAction extends AsyncTask<String, Void, String> {
private Context context;
public LogInAction(Context context) {
this.context = context;
}
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... arg0) {
String username = arg0[0];
String password = arg0[1];
String link;
String data;
BufferedReader bufferedReader;
String result;
try {
data = "?username=" + URLEncoder.encode(username, "UTF-8");
data += "&password=" + URLEncoder.encode(password, "UTF-8");
link = "http://threatmam.esy.es/loginActionAndroid.php" + data;
URL url = new URL(link);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
result = bufferedReader.readLine();
return result;
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
String jsonStr = result.toString();
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
// JSONObject jsonObj = new JSONObject(jsonStr.substring(jsonStr.indexOf("{"), jsonStr.lastIndexOf("}") + 1));
String query_result = jsonObj.getString("query_result");
if (query_result.equals("SUCCESS")) {
Toast.makeText(context, "Log in successful!", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(context,UserHomeDrawer.class)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else if (query_result.equals("FAILURE")) {
Toast.makeText(context, "Log in failed.", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(context, "Couldn't connect to remote database.", Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
Log.d("JSON", "Error:",e);
Toast.makeText(context, ""+e+"RES: "+jsonStr, Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(context, "Couldn't get any JSON data.", Toast.LENGTH_SHORT).show();
}
}
}
这是我的PHP代码
<?php
$un = $_GET['username'];
$pw = md5(sha1($_GET['password']));
$res = 0;
include "connect.php";
$query = "SELECT * FROM tbl_mobileuser";
result = $mysqli->query($query);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
if(($un == $row['Username']) && if($pw == $row['Password'])){
echo '{"query_result":"SUCCESS"}';
$res = 1;
}
}
}
else{
echo '{"query_result":"FAILURE"}';
}
if($res == 0){
echo '{"query_result":"FAILURE"}';
}
?>
我绝对抬头可能的解决办法,但我仍然无法解决这个问题。我希望有一个人可以帮助我。
我打你的网址如下:
http://threatmam.esy.es/loginActionAndroid.php?username=foo&password=bar
来自服务器的响应是:
<br /> <b>Parse error</b>: syntax error, unexpected '=' in <b>/home/u897407316/public_html/loginActionAndroid.php</b> on line <b>10</b><br />
看起来你有你的答案就在那里 - 请求失败的服务器端并返回一个错误响应,HTML中将尝试转换为JSON。这很自然地不起作用。
确保您向服务器发送了正确的请求,并且服务器代码工作正常。另外,您可能会考虑使用其中一个优秀的HTTP请求库(Volley,OkHttp,Retrofit等),而不是使用HttpURLConnection
来滚动您自己的解决方案。
我不能给予好评,但感谢! – camille
看起来像是在线#11上错过了$
。
变化,
result = $mysqli->query($query);
到,
$result = $mysqli->query($query);
注意:您没有正确阅读你的PHP脚本的响应。 readLine()
只能读取一行。如果您的PHP脚本输出多个(因为它是现在),您的android代码将无法读取它,你会错过一些数据。
我不能upvote,但谢谢! – camille
@camille请接受它是否有帮助。 :) –
'Log.d(“JSON”,jsonStr)'...调试请求,您将清楚地看到问题 –
运行php脚本。这是输出。 _
解析错误:语法错误,意想不到的 '=' 在loginActionAndroid.php上线
_ –