【问题标题】:Errororg.json.JSONException: End of input at character 0 of错误 Org.json.JSONException:在字符 0 处输入结束
【发布时间】:2018-11-18 21:22:12
【问题描述】:

我创建了一个需要登录系统的应用程序。我创建了注册,它可以工作,但是当我想登录时,我收到了这个错误消息

Errororg.json.JSONException:输入在字符 0 处结束

我已授予 Internet 权限!

我的登录班级是

package com.quizonwheels.quizfinal;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

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

import java.util.HashMap;
import java.util.Map;

public class Login extends AppCompatActivity {
 private Button openMore;
 private TextView openRegister;
 private Button btn_login;
    private EditText email,password;
    private static String URL_LOGIN = "https://test-onaca.lapausenii.ro/login.php";
    private ProgressBar loading;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        openMore = findViewById(R.id.learnmore);
        openRegister = findViewById(R.id.openRegister);
        btn_login = findViewById(R.id.login);
        loading = findViewById(R.id.loading1);
        email = findViewById(R.id.login_email);
        password = findViewById(R.id.login_password);

        openRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(Login.this,Register.class));
            }
        });

        openMore.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("https://quizonwheels.com")));
            }
        });

        btn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String mEmail = email.getText().toString().trim();
                String mPass = password.getText().toString().trim();

                if(!mEmail.isEmpty() || !mPass.isEmpty())
                {
                    login(mEmail,mPass);

                }
                else {
                    email.setError("Please insert E-mail");
                    password.setError("Please insert Password");
                }
            }
        });
    }

    private void login( final String email, final String password) {
        loading.setVisibility(View.VISIBLE);
        btn_login.setVisibility(View.GONE);

        StringRequest stringRequest = new StringRequest(Request.Method.POST, URL_LOGIN, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    String succes = jsonObject.getString("succes");
                    JSONArray jsonArray = jsonObject.getJSONArray("login");
                    if(succes.equals("1"))
                    {
                        for(int i = 0; i < jsonArray.length();i++)
                        {
                            JSONObject object = jsonArray.getJSONObject(i);
                            String name = object.getString("name").trim();
                            String email = object.getString("email").trim();
                            Toast.makeText(Login.this, "Succes \nYour name:" +name+"\n Your Email:" +email, Toast.LENGTH_SHORT).show();
                            loading.setVisibility(View.GONE);
                        }
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                    loading.setVisibility(View.GONE);
                    btn_login.setVisibility(View.VISIBLE);
                    Toast.makeText(Login.this, "Error" +e.toString(), Toast.LENGTH_SHORT).show();
                }
            }
        },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        loading.setVisibility(View.GONE);
                        btn_login.setVisibility(View.VISIBLE);
                        Toast.makeText(Login.this, "Error!" +error.toString(), Toast.LENGTH_SHORT).show();

                    }
                }
        ) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> params = new HashMap<>();
                params.put("email", email);
                params.put("password", password);
                return params;
            }
        };
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }
}

而我的php代码是:

<?php
  if($_SERVER['REQUEST_METHOD']== 'POST')
  {
      $email = $_POST['email'];
      $password = $_POST['password'];

      require_once 'connect.php';

      $sql = " SELECT * FROM users WHERE email = '$email'";
      $response = mysqli_query($conn,$sql);
      $result = array();
      $result['login']= array();
      if(mysqli_num_rows($respone)===1) {
          $row = mysqli_fetch_assoc($response);
          if(password_verify($password, $row['password']))
          {
              $index['name']=$row['name'];
              $index['email']= $row['email'];

              array_push($result['login'],$index);
              $result['succes'] = "1";
              $result['message']="succes";
              echo json_encode($result);

              mysqli_close($conn);

          }
          else {
              $result['succes']="0";
              $result['message']="error";
              echo json_encode($result);

              mysqli_close($conn);

          }
      }
  }
?>

我在谷歌上寻找解决方案,但我找不到。

【问题讨论】:

  • 显然,response 不是有效的 JSON 字符串。如果您将其记录在您的异常处理中,它是否包含任何不是 JSON 的内容?它包含任何东西吗?
  • 我应该编辑什么?
  • 要么在调试模式下运行你的应用程序并在你的catch (JSONException e) 块中设置一个断点,这样你就可以看到response 的值是什么,或者在同一个块中记录response。调试 JSON 错误的第一步是检查源字符串是什么。
  • 我去,我现在试试,谢谢!
  • 这是一个空...

标签: php android json parsing


【解决方案1】:

我的代表不允许我发表评论,所以希望我可以这样分享我的想法。如果在数据库中找到给定的电子邮件地址,您的代码只会输出一些 JSON。

您确定要为它提供一个现有的电子邮件地址,并且没有重复吗?此外,考虑将散列验证卸载到 RDBMS。这可能会加快脚本速度,并导致更清晰的关注点分离。您还需要转义您输入 SQL 的用户输入,因为 mysqli_query 默认情况下不进行任何转义。更好的方法可能是使用 PDO 准备语句。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多