簡體   English   中英

字符串無法轉換為JSONObject-Android

[英]String cannot be converted to JSONObject - Android

好了朋友們。 我使用MySQL和PHP開發了一個登錄注冊系統。 剛開始時,它運行良好,能夠注冊新帳戶,並且顯然可以登錄。 但是,在兩天內,我的Android設備出現了一些奇怪的錯誤(?!)。

這是我的PHP代碼:

<?php
$con = mysqli_connect("***", "***", "***", "***");

$email = $_POST["email"];
$password = $_POST["password"];
$name = $_POST["name"];
$age = $_POST["age"];
$location = $_POST["location"];


$statement = mysqli_prepare($con, "INSERT INTO useraccounts (email, password, name, age, location) VALUES (?, ?, ?, ?, ?)");
mysqli_stmt_bind_param($statement, "sssis", $email, $password, $name, $age, $location);
mysqli_stmt_execute($statement);

$response = array();
$response["success"] = true;  

echo json_encode($response);

這是我的RegisterRequest類:

public class RegisterRequest extends StringRequest {

private static final String REGISTER_REQUESTURL = "http://docscanner.ezyro.com/Register.php";
private Map<String, String> params;

public RegisterRequest(String email, String password, String name, int age, String location, Response.Listener<String> listener){
    super(Method.POST, REGISTER_REQUESTURL, listener, null);
    params = new HashMap<>();
    params.put("email", email);
    params.put("password", password);
    params.put("name", name);
    params.put("age", age+ "");
    params.put("location", location);
}

@Override
public Map<String, String> getParams() {
    return params;
}

最后,這是我的方法:

    try {
        final EditText etEmail = (EditText) findViewById(R.id.emailTxt);
        final EditText etPassword = (EditText) findViewById(R.id.passwordTxt);
        final EditText etName = (EditText) findViewById(R.id.nameTxt);
        final EditText etAge = (EditText) findViewById(R.id.ageTxt);
        final EditText etLocation = (EditText) findViewById(R.id.locationTxt);

        final String email = etEmail.getText().toString();
        final String password = etPassword.getText().toString();
        String name = etName.getText().toString();
        int age = Integer.parseInt(etAge.getText().toString());
        String location = etLocation.getText().toString();

        if (!etEmail.equals("") && !etPassword.equals("") && !etName.equals("") && !etAge.equals("") && !etLocation.equals("")) {
            if (isValidEmailAddress(email)) {

                Response.Listener<String> listener = new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            boolean success = jsonObject.getBoolean("success");
                            if (success) {
                                Intent loginIntent = new Intent(getApplicationContext(), LoginActivity.class);
                                loginIntent.putExtra("emailExtra", email);
                                loginIntent.putExtra("passwordExtra", password);
                                startActivity(loginIntent);
                            } else {
                                AlertDialog.Builder builder = new AlertDialog.Builder(RegisterActivity.this);
                                builder.setMessage("Register failed")
                                        .setNegativeButton("Retry", null)
                                        .create()
                                        .show();
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                };

                RegisterRequest registerRequest = new RegisterRequest(email, password, name, age, location, listener);
                RequestQueue queue = Volley.newRequestQueue(RegisterActivity.this);
                queue.add(registerRequest);
            } else {
                Toast.makeText(getApplicationContext(),
                        "Email format is not valid",
                        Toast.LENGTH_LONG)
                        .show();
            }
        } else {
            Toast.makeText(getApplicationContext(),
                    "All fields must be completed",
                    Toast.LENGTH_LONG)
                    .show();
        }
    }catch(NumberFormatException nEx){
        Toast.makeText(getApplicationContext(),
                "Please complete all fields in order to submit the document",
                Toast.LENGTH_LONG)
                .show();
    }
}

我的錯誤:

W / System.err:org.json.JSONException:值

據我所知,您的php代碼存在問題。 將此添加到您的php文件(一開始)

header('Content-Type: application/json');

我看到的另一個問題是,在進行簡單的發布請求(FROM POSTMAN)時,它會返回以下數據:

<html>
    <body>
        <script type="text/javascript" src="/aes.js" ></script>
        <script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f
            <d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("3c1ab4cc426e0aacb5f07f248a1799fe");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://docscanner.ezyro.com/Register.php?i=2";
            </script>
            <noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript>
        </body>
    </html>

以下顯然不是包含JSON數據的字符串。 嘗試添加指定代碼的標頭部分,如果可能的話,您應該考慮轉移到Firebase身份驗證或其他身份驗證服務,因為您正在通過HTTP連接發送非加密密碼。 您還向數據庫發送了一個未加密的密碼,這是另一個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM