因此,我一直在我的移动应用程序中忙碌,应该让我注册帐户并登录,同时从我创建的数据库获取一些数据。一切都很好,直到我已经改变我的register.php文件,以检查登录是否已被采取并据此采取行动。我想我有我的JSONObject和响应的问题,所以我尝试使用字符串,而不是布尔值,但仍然程序只进入尝试部分JSONObject jsonResponse =新的JSONObject(响应);然后立即进入代码的catch部分。我没有太多变化,老实说我会说我现在编写的代码比以前更干净,但是它不能正常工作。在Java中更改PHP代码后立即跳到“赶上”Android应用程序
当我点击“Zarejestruj”按钮(波兰语为注册)时,数据应发送到数据库(发生这种情况,但由于某种原因,我可以添加无限量的相同登录名),并且活动应该返回到LoginActivity。 java但它没有,它只是将凭据发送到数据库,并保持在那里为无穷大,同时让我垃圾垃圾从bRegister的地狱。
这里的java代码:
public class RegisterActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
Log.d("RA", "Zmienne");
final EditText etName = (EditText) findViewById(R.id.etName);
final EditText etSurame = (EditText) findViewById(R.id.etSurname);
final EditText etLogin = (EditText) findViewById(R.id.etLogin);
final EditText etPassword = (EditText) findViewById(R.id.etPassword);
final EditText etGroupNumber = (EditText) findViewById(R.id.etGroupNumber);
final EditText etIndexNumber = (EditText) findViewById(R.id.etIndexNumber);
final Button bRegister = (Button) findViewById(R.id.bRegister);
Log.d("RA", "Po zmienncyh");
bRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String name = etName.getText().toString().trim();
final String surname = etSurame.getText().toString().trim();
final String login = etLogin.getText().toString().trim();
final String password = etPassword.getText().toString().trim();
final String groupNumber = etGroupNumber.getText().toString().trim();
final String indexNumber = etIndexNumber.getText().toString().trim();
Log.d("RA", "Przed wywołąniem responseListener");
Response.Listener<String> responseListener = new Response.Listener<String>() {
@Override
public void onResponse(String response) {
Log.d("RA", "Response");
Log.d("RA", response);
Log.d("RA", "onResponse");
try {
Log.d("RA", "Try");
JSONObject jsonResponse = new JSONObject(response);
Log.d("RA", "ObiektResponse");
String success = jsonResponse.getString(response);
if (success == "success") {
Log.d("RA", "Success");
Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
RegisterActivity.this.startActivity(intent);
} else {
Log.d("RA", "Error");
AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
builder.setMessage("Register Failed")
.setNegativeButton("Retry", null)
.create()
.show();
}
} catch (JSONException e) {
Log.d("RA", "catch");
e.printStackTrace();
}
}
};
Log.d("RA", "Wykonało się");
RegisterRequest registerRequest = new RegisterRequest(name, surname, login, password, groupNumber, indexNumber, responseListener);
Log.d("RA", "queue");
RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
Log.d("RA", "registerRequest");
queue.add(registerRequest);
Log.d("RA", "Koniec");
}
});
}}
这里是我的Register.php文件:
require("Password.php");
ini_set('display_errors', 'On');
$mysqli = new mysqli("localhost", "id2147309_javaprojekt123", "javaprojekt321", "id2147309_javaprojekt");
if($mysqli->connect_errno){
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if(isset($_POST["name"]) && isset($_POST["surname"]) && isset($_POST["login"]) && isset($_POST["password"]) && isset($_POST["groupNumber"]) && isset($_POST["indexNumber"]))
{
$name = $_POST["name"];
$surname= $_POST["surname"];
$login = $_POST["login"];
$password = $_POST["password"];
$groupNumber = $_POST["groupNumber"];
$indexNumber = $_POST["indexNumber"];
}
function registerUser(){
global $mysqli, $name, $surname, $login, $password, $groupNumber, $indexNumber;
$passwordHash = password_hash($password, PASSWORD_DEFAULT);
$stmt = $mysqli->prepare("INSERT INTO user (name, surname, login, password, groupNumber, indexNumber) VALUES (?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssssss", $name, $surname, $login, $passwordHash, $groupNumber, $indexNumber);
$stmt->execute();
$stmt->close();
}
function usernameAvailable(){
global $mysqli, $login, $count;
$sql = "SELECT * FROM users WHERE login = ?";
if($stmt = $mysqli->prepare($sql)){
$stmt->bind_param("s", $login);
$stmt->execute();
$stmt->store_result();
$count = $stmt->num_rows;
$stmt->close();
}
if($count < 1){
return true;
}
else
return false;
}
$response = "false";
if(usernameAvailable()){
registerUser();
$response = "true";
}echo json_encode($response);
$mysqli->close();
如果在解析JSON响应时捕获错误,则响应中可能有非JSON。这条线告诉你什么? 'Log.d(“RA”,response);'日志是否显示有效的JSON字符串? – rickdenhaan
有了这个: $ response = array(); $ response [“success”] = false; \t \t \t如果(usernameAvailable()){ \t \t registerUser(); \t \t $ response [“success”] = true; \t} 林正从我的PHP文件回: {“成功”:真正} Loooks像一个有效的JSON响应我艰难 –
是的,但你的Android应用也什么*实际上*从接收你的服务器?你从Android代码中记录的* literal *'response'字符串是什么? – rickdenhaan