java - 运行应用程序时,字符串无法转换为 JSONObject 错误

标签 java php android mysql

我尝试了在以前的类似帖子中可以找到的所有内容,但没有帮助。我收到错误:“I/System.out:错误:org.json.JSONException:java.lang.String 类型的值 br 无法转换为 JSONObject”

Java 代码:

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import 
com.android.volley.toolbox.JsonObjectRequest;

import org.json.JSONException;
import org.json.JSONObject;

public class RegisterActivity extends AppCompatActivity {
private static final String KEY_STATUS = "status";
private static final String KEY_MESSAGE = "message";
private static final String KEY_FULL_NAME = "full_name";
private static final String KEY_USERNAME = "username";
private static final String KEY_PASSWORD = "password";
private static final String KEY_EMPTY = "";
private EditText etUsername;
private EditText etPassword;
private EditText etConfirmPassword;
private EditText etFullName;
private String username;
private String password;
private String confirmPassword;
private String fullName;
private ProgressDialog pDialog;
private String register_url = "http://10.0.2.2/user102/register.php";
private SessionHandler session;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    session = new SessionHandler(getApplicationContext());
    setContentView(R.layout.activity_register);

    etUsername = findViewById(R.id.etUsername);
    etPassword = findViewById(R.id.etPassword);
    etConfirmPassword = findViewById(R.id.etConfirmPassword);
    etFullName = findViewById(R.id.etFullName);

    Button login = findViewById(R.id.btnRegisterLogin);
    Button register = findViewById(R.id.btnRegister);

    //Launch Login screen when Login Button is clicked
    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(RegisterActivity.this, Login.class);
            startActivity(i);
            finish();
        }
    });

    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Retrieve the data entered in the edit texts
            username = etUsername.getText().toString().toLowerCase().trim();
            password = etPassword.getText().toString().trim();
            confirmPassword = etConfirmPassword.getText().toString().trim();
            fullName = etFullName.getText().toString().trim();
            if (validateInputs()) {
                registerUser();
            }

        }
    });

}

/**
 * Display Progress bar while registering
 */
private void displayLoader() {
    pDialog = new ProgressDialog(RegisterActivity.this);
    pDialog.setMessage("Signing Up.. Please wait...");
    pDialog.setIndeterminate(false);
    pDialog.setCancelable(false);
    pDialog.show();

}

/**
 * Launch Dashboard Activity on Successful Sign Up
 */
private void loadDashboard() {
    Intent i = new Intent(getApplicationContext(), DashboardActivity.class);
    startActivity(i);
    finish();

}

private void registerUser() {
    displayLoader();
    JSONObject request = new JSONObject();
    try {
        //Populate the request parameters
        request.put(KEY_USERNAME, username);
        request.put(KEY_PASSWORD, password);
        request.put(KEY_FULL_NAME, fullName);

    } catch (JSONException e) {
        e.printStackTrace();
    }
    System.out.println("JSON= "+ request.toString());
    JsonObjectRequest jsArrayRequest = new JsonObjectRequest
            (Request.Method.POST, register_url, request, new Response.Listener<JSONObject>() {
                @Override
                public void onResponse(JSONObject response) {
                    pDialog.dismiss();
                    try {
                        //Check if user got registered successfully
                        if (response.getInt(KEY_STATUS) == 0) {
                            //Set the user session
                            session.loginUser(username,fullName);
                            loadDashboard();

                        }else if(response.getInt(KEY_STATUS) == 1){
                            //Display error message if username is already existsing
                            etUsername.setError("Username already taken!");
                            etUsername.requestFocus();

                        }else{
                            Toast.makeText(getApplicationContext(),
                                    response.getString(KEY_MESSAGE), Toast.LENGTH_SHORT).show();

                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }, new Response.ErrorListener() {

                @Override
                public void onErrorResponse(VolleyError error) {
                    pDialog.dismiss();
                    System.out.println("Error: "+error.getMessage());
                    //Display error message whenever an error occurs
                    Toast.makeText(getApplicationContext(),
                            error.getMessage(), Toast.LENGTH_SHORT).show();

                }
            });

    // Access the RequestQueue through your singleton class.
    MySingleton.getInstance(this).addToRequestQueue(jsArrayRequest);
}

/**
 * Validates inputs and shows error if any
 * @return
 */
private boolean validateInputs() {
    if (KEY_EMPTY.equals(fullName)) {
        etFullName.setError("Full Name cannot be empty");
        etFullName.requestFocus();
        return false;

    }
    if (KEY_EMPTY.equals(username)) {
        etUsername.setError("Username cannot be empty");
        etUsername.requestFocus();
        return false;
    }
    if (KEY_EMPTY.equals(password)) {
        etPassword.setError("Password cannot be empty");
        etPassword.requestFocus();
        return false;
    }

    if (KEY_EMPTY.equals(confirmPassword)) {
        etConfirmPassword.setError("Confirm Password cannot be empty");
        etConfirmPassword.requestFocus();
        return false;
    }
    if (!password.equals(confirmPassword)) {
        etConfirmPassword.setError("Password and Confirm Password does not match");
        etConfirmPassword.requestFocus();
        return false;
    }

    return true;
}

PHP 代码:

<?php
$response = array();
include 'db/db_connect.php';
include 'db/functions.php';

//Get the input request parameters
$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE); 
//convert JSON into array

//Check for Mandatory parameters
if(isset($input['username']) && 
isset($input['password']) && 
isset($input['full_name'])){
$username = $input['username'];
$password = $input['password'];
$fullName = $input['full_name'];

//Check if user already exist
if(!userExists($username)){

    //Get a unique Salt
    $salt         = getSalt();

    //Generate a unique password Hash
    $passwordHash = password_hash(concatPasswordWithSalt($password,$salt),PASSWORD_DEFAULT);

    //Query to register new user
    $insertQuery  = "INSERT INTO user_data(username, full_name, password_hash, salt) VALUES (?,?,?,?)";
    if($stmt = $con->prepare($insertQuery)){
        $stmt->bind_param("ssss",$username,$fullName,$passwordHash,$salt);
        $stmt->execute();
        $response["status"] = 0;
        $response["message"] = "User created";
        $stmt->close();
    }
}

else{
    $response["status"] = 1;
    $response["message"] = "User exists";
}
}
else{
    $response["status"] = 2;
    $response["message"] = "Missing 
mandatory parameters";
}

echo json_encode($response);
?>

register_url字符串无法转换吗?我对此很陌生。谢谢

最佳答案

Try like this

try{
    JSONArray parametersForPhp = new JSONArray();

            JSONObject jsonObject = new JSONObject();
            jsonObject.put(key,value);
            jsonObject.put(key,value);

            parametersForPhp.put(jsonObject);
 JsonArrayRequest arrayRequest = new JsonArrayRequest(Request.Method.POST, httpurl, parametersForPhp,
                    new Response.Listener<JSONArray>() {
                        @Override
                        public void onResponse(JSONArray response) {
                            Log.d(TAG,response.toString());
                        }
                    }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    error.printStackTrace();
                }
            });
            RequestQueueSingleton.getInstance(getApplicationContext()).addToRequestQueue(arrayRequest);
}catch(Exception e){
e.printStackTrace();
}

关于java - 运行应用程序时,字符串无法转换为 JSONObject 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52517577/

相关文章:

android - 在清理项目时,R.java 从所有项目中消失

java - 如何从数据库传递两个变量以显示到android中的数组中

java - Java 中抽象类的使用

php - 数组中的条件语句

java - 从java中的网页检索URL

php - 多个插入查询

javascript - 如何提交放置在数据表中的表单?

javascript - 为什么 'share PDF' 和 'open PDF' 无法在使用 Nativescript 版本 6.2 的 Android 上运行

java - 带有任何字段到 POJO 的 Json 模式

java - 使用 javaSimon 监控 apache james 邮件服务器