Java 当jsonResponse从mySQL数据库获取空数据时,不会发生任何事情
我刚刚接触过java/android编程 我正在编写一个应用程序,用户可以在其中注册和登录。数据保存在在线mysql数据库中。注册和登录工作正常。用户通过使用会话保持loggig 即使从mysql数据库中获取数据也可以,但是当一些数据库字段响应“null”时,存在一个问题 这是我正在使用的代码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;
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);}