2017-02-19 105 views
0

我一直在试图让一个登录系统,我在Android Studio中应用程序,我不断收到此错误JSONException串不能转换成JSONArray

org.json.JSONException:类型的java.lang价值连接.String 无法转换为JSONArray

无法以任何方式修复它,我希望你能发现它并帮助我。 这里是登录活动,我相信这个问题是(如果需要的话我可以提供更多的代码)

{StringRequest stringRequest = new StringRequest(Request.Method.POST, login_url, 
     new Response.Listener<String>() { 
      @Override 
      public void onResponse(String response) { 
       try 
       { 
        JSONArray jsonArray = new JSONArray(response); 
        JSONObject jsonObject = jsonArray.getJSONObject(0); 
        String code = jsonObject.getString("code"); 
        if(code.equals("login_failed")) 
        { 
         builder.setTitle("Login Error..."); 
         displayAlert(jsonObject.getString("message")); 
        } 
        else 
        { 
         Intent intent = new Intent(LoginActivity.this,TestActivity.class); 
         Bundle bundle = new Bundle(); 
         bundle.putString("email",jsonObject.getString(("email"))); 
         intent.putExtras(bundle); 
         startActivity(intent); 
        } 
       } 
       catch (JSONException e) 
       { 
        e.printStackTrace(); 
       } 

      } 
     }, new Response.ErrorListener() { 
    @Override 
    public void onErrorResponse(VolleyError error) 
    { 
     Toast.makeText(LoginActivity.this,"Error",Toast.LENGTH_LONG).show(); 
     error.printStackTrace(); 
    } 
}) 
{ 
    @Override 
    protected Map<String, String> getParams() throws AuthFailureError 
    { 
     Map<String,String> params = new HashMap<String, String>(); 
     params.put("email",email); 
     params.put("password",password); 
     return params; 
    } 
}; 
    MySingleton.getmInstance(LoginActivity.this).addToRequestQue(stringRequest); 

} 

这里是PHP代码的一部分:

<?php 
require "connection.php"; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 

$sql = "select email,password from user_info where email like '".$email."' and password like '".$password."';"; 
$result = mysqli_query($connection,$sql); 
$response = array(); 
if(mysqli_num_rows($result)>0) 
{ 
    $row = mysqli_fetch_row($result); 
    $email = $row[0]; 
    $password = $row[1]; 
    $code = "login_success"; 
    array_push($response,array("code"=>$code,"email"=>$email,"password"=>$password)); 
    echo json_encode($response); 
} 
else 
{ 
    $code = "login_failed"; 
    $message = "User not found..."; 
    array_push($response,array("code"=>$code,"message"=>$message)); 
    echo json_encode($response);  
} 
mysqli_close($connection); 
?> 

回答

1

您不能创建一个来自String的JSONArray,除非该字符串是一个正确的字符串化JSON文件。

您必须在您的PHP中将您的数组转换为JSON字符串。 (反之亦然,如果我理解错误的关系,我没有太准确地读你的代码)。

另一种解决方案是让你使用jQuery和ajax函数来调用PHP脚本(我不知道你在创建什么,可能是一个Cordova插件,在这种情况下你有Javascript,否则你将不得不在Java中做类似的事情,谷歌是你的朋友)。

这是一个直接从我自己的应用程序中取得的功能。通读它,它可能不是100%可复制的。重要的部分是它将JavaScript对象转换为适当的JSON字符串,然后将其发送到您的PHP函数。

function login(successCallback, errorCallback, args) { 
var loginData = { 
    "username": args[0].username, 
    "password": args[0].password 
}; 
var dataString = JSON.stringify(loginData); 
$.ajax({ 
    url: 'login.php', 
    method: 'post', 
    data: {loginData: dataString}, 
    dataType: 'json', 
    complete: function (data) { 
     console.log(data.responseText); 
    }, 
    error: function (xhr, status, errorThrown) { 
     console.log("Error: " + errorThrown); 
     console.log("Status: " + status); 
     errorCallback('Error logging in!'); 
    }, 
    success: function (data) { 
     if (data.status == "success") { 
      console.log(data.responseText); 
      successCallback('Success logging in!'); 
     } else if (data.status = "noConnection") { 
      console.log(data.responseText); 
      errorCallback('Could not connect to database.'); 
     } else { 
      console.log(data.responseText); 
      errorCallback('Error logging in (but database was connected to)!'); 
     } 
    } 
}); 

}

+0

干杯伴侣,它解决了由转换阵列成JSON字符串。谢谢 –

相关问题