JSON异常:值<! - ?类型java.lang.String无法转换为JSONObject

时间:2017-09-13 10:42:40

标签: php android json android-asynctask

我在android上创建登录应用程序我使用asynctask和Json通过服务器交换数据但我收到此错误我正在添加code.kindly帮助人

    class RegisterUser extends AsyncTask<Void, Void, String> {

        private ProgressBar progressBar;

        @Override
        protected String doInBackground(Void... voids) {
            //creating request handler object
            RequestHandler requestHandler = new RequestHandler();

            //creating request parameters
            HashMap<String, String> params = new HashMap<>();
            params.put("username", username);
            params.put("email", email);
            params.put("password", password);
            params.put("gender", gender);

            //returing the response
            return requestHandler.sendPostRequest(URLs.URL_REGISTER, 
        params);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //displaying the progress bar while user registers on the server
            progressBar = (ProgressBar) findViewById(R.id.progressBar);
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //hiding the progressbar after completion
            progressBar.setVisibility(View.GONE);
            Log.i("JSON Parser", s);
            try {
                //converting response to json object
                JSONObject obj = new JSONObject(s);
              //  Log.i("JSON Parser", obj);

                //if no error in response
                if (!obj.getBoolean("error")) {
                    Toast.makeText(getApplicationContext(), 
     obj.getString("message"), Toast.LENGTH_SHORT).show();

                    //getting the user from the response
                    JSONObject userJson = obj.getJSONObject("user");

                    //creating a new user object
                    User user = new User(
                            userJson.getInt("id"),
                            userJson.getString("username"),
                            userJson.getString("email"),
                            userJson.getString("gender")
                    );

                    //storing the user in shared preferences


     SharedPrefManager.getInstance(getApplicationContext()).userLogin(user);

                    //starting the profile activity
                    finish();
                    startActivity(new Intent(getApplicationContext(), 
  ProfileActivity.class));
                } else {
                    Toast.makeText(getApplicationContext(), "Some error 
 occurred", Toast.LENGTH_SHORT).show();
                }
            } catch (JSONException e) {
                e.printStackTrace();
                Log.d("error is","this");
            }
        }
    }

    //executing the async task
    RegisterUser ru = new RegisterUser();
    ru.execute();
   }

而有趣的是 下面的log.i

  @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            //hiding the progressbar after completion
            progressBar.setVisibility(View.GONE);
            Log.i("JSON Parser", s); 

给我两个我的php文件的源代码

我的php文件在

之下
<?php

require_once 'DbConnect.php';

//an array to display response
$response = array();
mysqli_set_charset($con, 'utf8');
//if it is an api call 
//that means a get parameter named api call is set in the URL 
//and with this parameter we are concluding that it is an api call

if (isset($_GET['apicall'])) {

    switch ($_GET['apicall']) {

        case 'signup':
            //checking the parameters required are available or not 



            if (isTheseParametersAvailable
                            (array('username', 'email', 'password', 'gender'))) {

                //getting the values 
                $username = $_POST['username'];
                $email = $_POST['email'];
                $password = md5($_POST['password']);
                $gender = $_POST['gender'];

                //checking if the user is already exist with this username 
                or email
                //as the email and username should be unique for every user 
                $stmt = $conn->prepare("SELECT id FROM users WHERE username 
        = ? OR email = ?");
                $stmt->bind_param("ss", $username, $email);
                $stmt->execute();
                $stmt->store_result();

                //if the user already exist in the database 
                if ($stmt->num_rows > 0) {
                    $response['error'] = true;
                    $response['message'] = 'User already registered';
                    $stmt->close();
                } else {

                    //if user is new creating an insert query 
                    $stmt = $conn->prepare("INSERT INTO users (username, 
        email, password, gender) VALUES (?, ?, ?, ?)");
                    $stmt->bind_param("ssss", $username, $email, $password, $gender);

                    //if the user is successfully added to the database 
                    if ($stmt->execute()) {

                        //fetching the user back 
                        $stmt = $conn->prepare("SELECT id, id, username, 
          email, gender FROM users WHERE username = ?");
                        $stmt->bind_param("s", $username);
                        $stmt->execute();
                        $stmt->bind_result($userid, $id, $username, $email, $gender);
                        $stmt->fetch();

                        $user = array(
                            'id' => $id,
                            'username' => $username,
                            'email' => $email,
                            'gender' => $gender
                        );

                        $stmt->close();

                        //adding the user data in response 
                        $response['error'] = false;
                        $response['message'] = 'User registered 
               successfully';
                        $response['user'] = $user;
                    }
                }
            } else {
                $response['error'] = true;
                $response['message'] = 'required parameters are not 
            available';
            }

            break;

        case 'login':
            //for login we need the username and password 
            if (isTheseParametersAvailable(array('username', 'password'))) {
                //getting values 
                $username = $_POST['username'];
                $password = md5($_POST['password']);

                //creating the query 
                $stmt = $conn->prepare("SELECT id, username, email, gender 
               FROM users WHERE username = ? AND password = ?");
                $stmt->bind_param("ss", $username, $password);

                $stmt->execute();

                $stmt->store_result();

                //if the user exist with given credentials 
                if ($stmt->num_rows > 0) {

                    $stmt->bind_result($id, $username, $email, $gender);
                    $stmt->fetch();

                    $user = array(
                        'id' => $id,
                        'username' => $username,
                        'email' => $email,
                        'gender' => $gender
                    );

                    $response['error'] = false;
                    $response['message'] = 'Login successfull';
                    $response['user'] = $user;
                } else {
                    //if the user not found 
                    $response['error'] = false;
                    $response['message'] = 'Invalid username or password';
                }
            }
            break;

        default:
            $response['error'] = true;
            $response['message'] = 'Invalid Operation Called';
    }
} else {
    //if it is not api call 
    //pushing appropriate values to response array 
    $response['error'] = true;
    $response['message'] = 'Invalid API Call';
}

//displaying the response in json structure 
echo json_encode($response);

//function validating all the paramters are available
//we will pass the required parameters to this function 
function isTheseParametersAvailable($params) {

    //traversing through all the parameters 
    foreach ($params as $param) {
        //if the paramter is not available
        if (!isset($_POST[$param])) {
            //return false 
            return false;
        }
    }
    //return true if every param is available 
    return true;
}

我是android和java的新手并且自己学习。我在某个网站上发现了这个代码并试图执行它,但它给出了这个错误。 帮助

1 个答案:

答案 0 :(得分:0)

看起来您的PHP文件无效。它从<?开始,在头部缺少php。因此,不要使用<?而是在PHP文件中使用<?php

在读取文件时,Apache(或您使用的任何PHP服务器)读取它,并且不会将其识别为PHP文件。因此,只需将其内容作为回复发送即可将其作为文本文件处理。