因此,我一直在我的移動應用程序中忙碌,應該讓我註冊帳戶並登錄,同時從我創建的數據庫獲取一些數據。一切都很好,直到我已經改變我的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