Java 当jsonResponse从mySQL数据库获取空数据时,不会发生任何事情

Java 当jsonResponse从mySQL数据库获取空数据时,不会发生任何事情,java,php,android,mysql,json,Java,Php,Android,Mysql,Json,我刚刚接触过java/android编程 我正在编写一个应用程序,用户可以在其中注册和登录。数据保存在在线mysql数据库中。注册和登录工作正常。用户通过使用会话保持loggig 即使从mysql数据库中获取数据也可以,但是当一些数据库字段响应“null”时,存在一个问题 这是我正在使用的代码 public class UserProfileSettingsFragment extends PreferenceFragment { SessionManager session;

我刚刚接触过java/android编程

我正在编写一个应用程序,用户可以在其中注册和登录。数据保存在在线mysql数据库中。注册和登录工作正常。用户通过使用会话保持loggig

即使从mysql数据库中获取数据也可以,但是当一些数据库字段响应“null”时,存在一个问题

这是我正在使用的代码

    public class UserProfileSettingsFragment extends PreferenceFragment
{

    SessionManager session;

    @Override
    public void onCreate(final Bundle savedInstanceState)
    {
        SharedPreferences prefs = this.getActivity().getSharedPreferences("JampSharedPrefs", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prefs.edit();

        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.usersettings);

        session = new SessionManager(this.getActivity().getApplicationContext());



        HashMap<String,String> user = session.getUserDetails();
        final String sessionUsername = user.get(SessionManager.KEY_USERNAME);

        // ResponseListener um Request Nutzerdaten auszulesen.
        Response.Listener<String> UserDataResponseListener = new Response.Listener<String>(){
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonResponse = new JSONObject(response);
                    boolean success = jsonResponse.getBoolean("success");

                    // Wenn Datenabfrage erfolgreich, JSONResponse auswerten.
                    if (success) {
                        String responseRealName   = jsonResponse.getString("realname");
                        String responseStreetName = jsonResponse.getString("streetname");
                        int    responsePostcode   = jsonResponse.getInt   ("postcode");
                        String responseCity       = jsonResponse.getString("city");
                        String responseState      = jsonResponse.getString("state");
                        int    responseAge        = jsonResponse.getInt   ("age");
                        int    responseIsPremium  = jsonResponse.getInt   ("isPremium"); // BOOLEAN

                        Preference prefUserData = (Preference) findPreference("preferencescreen_userdata");
                        prefUserData.setTitle(sessionUsername);
                        //prefUserData.setSummary(responseRealName+"\n"+responseStreetName+"\n"+responsePostcode + " " + responseCity);

                        Preference prefUsername = (Preference) findPreference("settings_username");
                        prefUsername.setTitle(sessionUsername);

                        Toast.makeText(getActivity(),sessionUsername, Toast.LENGTH_LONG);

                        if (responseIsPremium==1){
                            //ivPremiumIcon.setVisibility(View.VISIBLE);
                        }


                    }else{
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                        builder.setMessage("Konnte Nutzerdaten nicht abrufen.")
                                .setNegativeButton("Nochmal",null)
                                .create()
                                .show();
                    }

                } catch (JSONException e) {
                    e.printStackTrace();
                }

            }


        };

        // Request an userdatarequest.php senden
        UserDataRequest userDataRequest = new UserDataRequest(sessionUsername, UserDataResponseListener);
        RequestQueue queue = Volley.newRequestQueue(this.getActivity());
        queue.add(userDataRequest);


    }
}
因此,当我获取用户数据时,我可以用Toast、change preference.summaries或其他方式显示它们。但是,如果一些mysql条目为空/空,则什么也不会发生。应用程序没有崩溃,但似乎没有从php文件中获取“success”布尔值。线索是什么

提前谢谢。 艾里克


我是否应该删除
$response[“success”]=false?
通常,如果应用程序无法连接到数据库,并且错误的bool到达我的应用程序,我会收到一条alertmessage,所以我认为它就在那里

当我在变量后面添加空格时,我知道它们的DB单元格是空的,那么jsonresponse会将一个“0”值作为字符串结果,如下所示:

      $response["realname"] = $realname+" ";
      $response["streetname"] = $streetname+" ";
      $response["postcode"] = $postcode+" ";
      $response["city"] = $city+" ";
      $response["state"] = $state+ " ";
在文本视图中,它们是否逐行显示为“0”

我必须在我的应用程序中解决这个问题,还是有一种简单的方法可以过滤空单元格并跳到下一个

    $response["success"] = true;
$record_size = 0;

while(mysqli_stmt_fetch($statement)){
    $response["success"] = true;        
    $response["username"] = $username;
    $response["password"] = $password;
    $response["email"] = $email;
    $response["age"] = $age;
    $response["realname"] = $realname;
    $response["streetname"] = $streetname;
    $response["postcode"] = $postcode;
    $response["city"] = $city;
    $response["state"] = $state;
    $response["isPremium"] = $isPremium;
    $response["isLoggedIn"] = $isLoggedIn;
    $record_size++;
}

$response["record_size"]  = $record_size;

echo json_encode($response);

对于记录数,我使用$record\u size变量,以便您了解有关记录的信息。因为$response[“success”]=true;意味着您能够成功获取数据库,对于记录,您可以使用$response[“记录大小”]。。我希望它能对您有所帮助。

我的解决方案现在是这样的: 如果我得到0个值,我将用xml资源中的“缺少[…]”替换它们

还有另一个不匹配。。似乎我总是以字符串的形式获取jsonresponse,但我想在我的第一个代码中以整数的形式获取邮政编码,这也不起作用。因此,当我需要它时,我必须将它解析为int

String responseRealName   = jsonResponse.getString("realname");     if (responseRealName.equals("0"))   {responseRealName = getResources().getString(R.string.MissingRealName);}
                        String responseStreetName = jsonResponse.getString("streetname");   if (responseStreetName.equals("0")) {responseStreetName = getResources().getString(R.string.MissingStreetName);}
                        String responsePostcode   = jsonResponse.getString("postcode");     if (responsePostcode.equals("0"))   {responsePostcode = getResources().getString(R.string.MissingPostcode);}
                        String responseCity       = jsonResponse.getString("city");         if (responseCity.equals("0"))       {responseCity = getResources().getString(R.string.MissingCity);}
                        String responseState      = jsonResponse.getString("state");        if (responseState.equals("0"))      {responseState = getResources().getString(R.string.MissingState);}

我想我的问题已经回答得够多了。

因为如果没有数据,您将其设置为false
$response[“success”]=false
String responseRealName   = jsonResponse.getString("realname");     if (responseRealName.equals("0"))   {responseRealName = getResources().getString(R.string.MissingRealName);}
                        String responseStreetName = jsonResponse.getString("streetname");   if (responseStreetName.equals("0")) {responseStreetName = getResources().getString(R.string.MissingStreetName);}
                        String responsePostcode   = jsonResponse.getString("postcode");     if (responsePostcode.equals("0"))   {responsePostcode = getResources().getString(R.string.MissingPostcode);}
                        String responseCity       = jsonResponse.getString("city");         if (responseCity.equals("0"))       {responseCity = getResources().getString(R.string.MissingCity);}
                        String responseState      = jsonResponse.getString("state");        if (responseState.equals("0"))      {responseState = getResources().getString(R.string.MissingState);}