使用Android Developer、PHP和MySQL的Android应用程序给出错误:org.json.JSONException:无状态值

使用Android Developer、PHP和MySQL的Android应用程序给出错误:org.json.JSONException:无状态值,php,android,mysql,Php,Android,Mysql,我是Android新手,正在尝试使用PHP和MySQL与Android Developer Studio开发一个应用程序 我的RegisterActivity文件如下所示: package com.mobiapp.hospmgmt; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatA

我是Android新手,正在尝试使用PHP和MySQL与Android Developer Studio开发一个应用程序

我的RegisterActivity文件如下所示:

package com.mobiapp.hospmgmt;

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;

import java.util.Date;

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_ADDR1 = "addr1";
    private static final String KEY_ADDR2 = "addr2";
    private static final String KEY_ADDR3 = "addr3";
    private static final String KEY_CITY = "city";
    private static final String KEY_PIN = "pin";
    private static final String KEY_STATE = "state";
    private static final String KEY_COUNTRY = "country";
    private static final String KEY_EMAIL = "email";
    private static final String KEY_PHONE = "phone";
    private static final String KEY_MOBILE = "mobile";
    private static final String KEY_USERTYPE = "usertype";

    private static final String KEY_EMPTY = "";
    private EditText etUsername;
    private EditText etPassword;
    private EditText etConfirmPassword;
    private EditText etFullName;
    private EditText etAddr1;
    private EditText etAddr2;
    private EditText etAddr3;
    private EditText etCity;
    private EditText etPin;
    private EditText etState;
    private EditText etCountry;
    private EditText etEmail;
    private EditText etPhone;
    private EditText etMobile;
    private EditText etUsertype;

    private String username;
    private String password;
    private String confirmPassword;
    private String fullName;
    private String addr1;
    private String addr2;
    private String addr3;
    private String city;
    private String pin;
    private String ustate;
    private String country;
    private String email;
    private String phone;
    private String mobile;
    private String usertype;

    private ProgressDialog pDialog;
    private String register_url = "http://192.168.42.252:80/hospmgmt/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);
        etAddr1 = findViewById(R.id.etAddr1);
        etAddr2 = findViewById(R.id.etAddr2);
        etAddr3 = findViewById(R.id.etAddr3);
        etCity = findViewById(R.id.etCity);
        etPin = findViewById(R.id.etPin);
        etState = findViewById(R.id.etState);
        etCountry = findViewById(R.id.etCountry);
        etEmail = findViewById(R.id.etEmail);
        etPhone = findViewById(R.id.etPhone);
        etMobile = findViewById(R.id.etMobile);
        etUsertype = findViewById(R.id.etUsertype);

        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, MainActivity.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();
                addr1 = etAddr1.getText().toString().trim();
                addr2 = etAddr2.getText().toString().trim();
                addr3 = etAddr3.getText().toString().trim();
                city = etCity.getText().toString().trim();
                ustate = etState.getText().toString().trim();
                pin = etPin.getText().toString().trim();
                country = etCountry.getText().toString().trim();
                email = etEmail.getText().toString().trim();
                phone = etPhone.getText().toString().trim();
                mobile = etMobile.getText().toString().trim();
                usertype = etUsertype.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);
            request.put(KEY_ADDR1, addr1);
            request.put(KEY_ADDR2, addr2);
            request.put(KEY_ADDR3, addr3);
            request.put(KEY_CITY, city);
            request.put(KEY_STATE, ustate);
            request.put(KEY_PIN, pin);
            request.put(KEY_COUNTRY,country);
            request.put(KEY_EMAIL, email);
            request.put(KEY_PHONE, phone);
            request.put(KEY_MOBILE, mobile);
            request.put(KEY_USERTYPE,usertype);

        } catch (JSONException e) {
            e.printStackTrace();
        }
        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();

                        //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

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

$response = array();
require("db/db_connect.php");
require("userfunctions.php");

//Get the input request parameters
$inputJSON = file_get_contents('php://input');

echo $inputJSON;
$input = json_decode($inputJSON, TRUE); //convert JSON into array
echo $input;

var_dump($inputJSON);
var_dump($input);
//Check for Mandatory parameters
if(isset($input['username']) && isset($input['password']) && isset($input['full_name'])){
    $userid = 0;
    $username = $input['username'];
    $password = $input['password'];
    $fullName = $input['full_name'];
    $datecreated = date("d/m/Y");
    $addr1 = $input['addr1'];
    $addr2 = $input['addr2'];
    $addr3 = $input['addr3'];
    $city = $input['city'];
    $pin = $input['pin'];
    $state = $input['state'];
    $country = $input['country'];
    $email = $input['email'];
    $phone = $input['phone'];
    $mobile = $input['mobile'];
    $usertype = $input['usertype'];

    //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(user_id, user_name, user_fullname, user_passwordhash, user_passwordsalt, user_datecreated, user_addr1, user_addr2, user_addr3, user_city, user_pin, user_state, user_country, user_email, user_phone, user_mobile, user_type) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        if($stmt = $con->prepare($insertQuery)){
            $stmt->bind_param("issssssssssssssss", $userid, $username,$fullName,$passwordHash,$salt, $datecreated, $addr1, $addr2, $addr3, $city, $pin, $state, $country, $email, $phone, $mobile, $usertype);
            $stmt->execute();
            $response["status"] = 0;
            $response["message"] = "User created";
            error_log("$response set - 1");
            $stmt->close();
        }
        else{
            $response["status"] = 9;
            $response["message"] = "Error preparing INSERT query for database table USER";
            error_log("$response set - 2");
        }
    }
    else{
        $response["status"] = 1;
        $response["message"] = "User exists";
        error_log("$response set - 3");
    }
}
else{
    $response["status"] = 2;
    $response["message"] = "Missing mandatory parameters";
    error_log("$response set - 4");
}
error_log(var_dump($response));
echo json_encode($response);
?>
package com.mobiapp.hospmgmt;
导入android.app.ProgressDialog;
导入android.content.Intent;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.view.view;
导入android.widget.Button;
导入android.widget.EditText;
导入android.widget.Toast;
导入com.android.volley.Request;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.JsonObjectRequest;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.Date;
公共类注册活动扩展了AppCompatActivity{
私有静态最终字符串密钥\u STATUS=“STATUS”;
私有静态最终字符串键\u MESSAGE=“MESSAGE”;
私有静态最终字符串键\u FULL\u NAME=“FULL\u NAME”;
私有静态最终字符串密钥\u USERNAME=“USERNAME”;
私有静态最终字符串密钥\u PASSWORD=“PASSWORD”;
私有静态最终字符串键\u ADDR1=“ADDR1”;
私有静态最终字符串键\u ADDR2=“ADDR2”;
私有静态最终字符串键\u ADDR3=“ADDR3”;
私有静态最终字符串KEY_CITY=“CITY”;
私有静态最终字符串键\u PIN=“PIN”;
私有静态最终字符串KEY_STATE=“STATE”;
私有静态最终字符串密钥\u COUNTRY=“COUNTRY”;
私有静态最终字符串密钥\u EMAIL=“EMAIL”;
专用静态最终字符串键\u PHONE=“PHONE”;
私有静态最终字符串密钥\u MOBILE=“MOBILE”;
私有静态最终字符串键\u USERTYPE=“USERTYPE”;
私有静态最终字符串密钥_EMPTY=“”;
私有编辑文本和用户名;
私人编辑文本和密码;
私有EditText etConfirmPassword;
私有编辑文本etFullName;
私有编辑文本etAddr1;
私有编辑文本etAddr2;
私有编辑文本etAddr3;
私人城市;
私人编辑文本etPin;
国家私人编辑部;
国家私人编辑部;
私人编辑邮件;
私人编辑文本电话;
私人编辑文本和手机;
私有EditText etUsertype;
私有字符串用户名;
私有字符串密码;
私有字符串确认密码;
私有字符串全名;
私有字符串addr1;
私有字符串addr2;
私有字符串addr3;
私人城市;
私有字符串pin;
私有字符串ustate;
私人国家;
私人字符串电子邮件;
私人电话;
私有字符串移动;
私有字符串用户类型;
私人对话;
专用字符串寄存器\u url=”http://192.168.42.252:80/hospmgmt/register.php";
私有会话处理程序会话;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
session=newsessionhandler(getApplicationContext());
setContentView(R.layout.activity\u寄存器);
etUsername=findviewbyd(R.id.etUsername);
etPassword=findviewbyd(R.id.etPassword);
etConfirmPassword=findviewbyd(R.id.etConfirmPassword);
etFullName=findviewbyd(R.id.etFullName);
etAddr1=findViewById(R.id.etAddr1);
etAddr2=findviewbyd(R.id.etAddr2);
etAddr3=findviewbyd(R.id.etAddr3);
etCity=findviewbyd(R.id.etCity);
etPin=findviewbyd(R.id.etPin);
etState=findviewbyd(R.id.etState);
etCountry=findviewbyd(R.id.etCountry);
etEmail=findviewbyd(R.id.etEmail);
etPhone=findviewbyd(R.id.etPhone);
etMobile=findviewbyd(R.id.etMobile);
etUsertype=findviewbyd(R.id.etUsertype);
按钮登录=findViewById(R.id.btnRegisterLogin);
按钮寄存器=findViewById(R.id.btnRegister);
//单击登录按钮时启动登录屏幕
login.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意图i=新意图(RegisterActivity.this,MainActivity.class);
星触觉(i);
完成();
}
});
register.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
//检索编辑文本中输入的数据
username=etUsername.getText().toString().toLowerCase().trim();
password=etPassword.getText().toString().trim();
confirmPassword=etConfirmPassword.getText().toString().trim();
fullName=etFullName.getText().toString().trim();
addr1=etAddr1.getText().toString().trim();
addr2=etAddr2.getText().toString().trim();
addr3=etAddr3.getText().toString().trim();
city=etCity.getText().toString().trim();
ustate=etState.getText().toString().trim();
pin=etPin.getText().toString().trim();
country=etCountry.getText().toString().trim();
email=etEmail.getText().toString().trim();
phone=etPhone.getText().toString().trim();
mobile=etMobile.getText().toString().trim();
usertype=etUsertype.getText().toString().trim();
如果(validateInputs()){
registerUser();
}
}
});
}
/**
*注册时显示进度条
*/
私有void displayLoader(){
pDialog=newprogressdialog(RegisterActivity.this);
pDialog.setMessage(“正在注册..请稍候…”);
pDialog.setUndeterminate(假);
pDialog.setCancelable(假);
pDialog.show();
}
/**
*成功注册后启动仪表板活动
*/
私有void loadDashboard(){
意图
 StringRequest sr = new StringRequest(Request.Method.POST, "url", new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Log.e("response", response);
              try {
                    JSONObject object = new JSONObject(response);
                    String status = object.getString("status");
                  if (status.equals("0"){
                      //do something
                    }
                  } catch (JSONException e) {
                    progressDialog.dismiss();
                    Toast.makeText(OtpVerfication.this, "Please check network connection" + e, Toast.LENGTH_LONG).show();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                progressDialog.dismiss();
                VolleyLog.d("Daily_bonus", "Error " + error.getMessage());
                if (error instanceof TimeoutError || error instanceof NoConnectionError) {
                    Toast.makeText(OtpVerfication.this, "Seems your internet connection is slow, please try in sometime. ",
                            Toast.LENGTH_LONG).show();
                } else if (error instanceof AuthFailureError) {
                    Toast.makeText(OtpVerfication.this, " Authentication error occurred, please try again later",
                            Toast.LENGTH_LONG).show();
                } else if (error instanceof ServerError) {
                    Toast.makeText(OtpVerfication.this, " Server error occurred, please try again later",
                            Toast.LENGTH_LONG).show();
                } else if (error instanceof NetworkError) {
                    Toast.makeText(OtpVerfication.this, " Network error occurred, please try again later",
                            Toast.LENGTH_LONG).show();
                } else if (error instanceof ParseError) {
                    Toast.makeText(OtpVerfication.this, " An error occurred, please try again later",
                            Toast.LENGTH_LONG).show();
                }
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<String, String>();
                params.put("name", "abc");//passing parameters

                return params;
            }
        };
        sr.setRetryPolicy(new DefaultRetryPolicy(20000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(sr);
<?php

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

$response = array();
require("db/db_connect.php");
require("userfunctions.php");


$input= $_POST;

//Check for Mandatory parameters
if(isset($input['username']) && isset($input['password']) && isset($input['full_name'])){
    $userid = 0;
    $username = $input['username'];
    $password = $input['password'];
    $fullName = $input['full_name'];
    $datecreated = date("d/m/Y");
    $addr1 = $input['addr1'];
    $addr2 = $input['addr2'];
    $addr3 = $input['addr3'];
    $city = $input['city'];
    $pin = $input['pin'];
    $state = $input['state'];
    $country = $input['country'];
    $email = $input['email'];
    $phone = $input['phone'];
    $mobile = $input['mobile'];
    $usertype = $input['usertype'];

    //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(user_id, user_name, user_fullname, user_passwordhash, user_passwordsalt, user_datecreated, user_addr1, user_addr2, user_addr3, user_city, user_pin, user_state, user_country, user_email, user_phone, user_mobile, user_type) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        if($stmt = $con->prepare($insertQuery)){
            $stmt->bind_param("issssssssssssssss", $userid, $username,$fullName,$passwordHash,$salt, $datecreated, $addr1, $addr2, $addr3, $city, $pin, $state, $country, $email, $phone, $mobile, $usertype);
            $stmt->execute();
            $response["status"] = 0;
            $response["message"] = "User created";
            error_log("$response set - 1");
            $stmt->close();
        }
        else{
            $response["status"] = 9;
            $response["message"] = "Error preparing INSERT query for database table USER";
            //error_log("$response set - 2");
        }
    }
    else{
        $response["status"] = 1;
        $response["message"] = "User exists";
        //error_log("$response set - 3");
    }
}
else{
    $response["status"] = 2;
    $response["message"] = "Missing mandatory parameters";
    //error_log("$response set - 4");
}
//error_log(var_dump($response));
echo $response;
?>