Php json解析中的问题
我必须下载一个演示apk。我正在使用php在数据库中插入一些值。但在某个时刻,它抛出了一个错误Php json解析中的问题,php,android,json,Php,Android,Json,我必须下载一个演示apk。我正在使用php在数据库中插入一些值。但在某个时刻,它抛出了一个错误 org.json.JSONException: Value at validity_days of type java.lang.String cannot be converted to int java中的代码段: private void upgradeVersion(String apkPath) { System.out.println("SDCARD path chec
org.json.JSONException: Value at validity_days of type java.lang.String cannot be converted to int
java中的代码段:
private void upgradeVersion(String apkPath) {
System.out.println("SDCARD path checked5:-"+apkPath);
if(saveUserInfo()==true)
{
System.out.println("validity...."+validity);
if (apkPath != null) {
progressDialog.dismiss();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(new File(apkPath)),
"application/vnd.android.package-archive");
intent.putExtra("validity_days", validity);
startActivityForResult(intent, 1);
Toast.makeText(getApplicationContext(),"NetVidya ebook app has been successfully installed.", Toast.LENGTH_LONG).show();
}
}
php响应:
{"users":[{"status":"added","installeddate":"","active":"Y","validity_days":""}]}
我在这里得到空值,这是y抛出的错误
有可能在android本身中处理这个异常吗?或者我必须在php中做一些更改
请建议根据您在上面列出的例外情况,我认为您在这一行遇到了例外情况:
startActivityForResult(intent, 1);
把这条线换成
startActivity(intent);
并在其他活动中获取JSONString作为
Intent i = getIntent();
String str = i.getStringExtra("validity_days");
为什么不在变量引发异常之前将变量
validity\u days
解析为整数呢?在没有看到JSON解析器的情况下,我想问题是因为您需要使用validity\u days,并且该字符串(至少在某些情况下)可能没有值
try{
JSONObject fullString = new JSONObject(thatLongStringYouPosted);
JSONArray users = fullString.getJSONObject("users");
String validity_days = users.getJSONObject(0),getString("validity_days");
if(!validity_days.isEmpty() && validity_days != null)
//do whatever you want with it
}
} catch (JSONException e){
Log.e(TAG, e.toString());
}
解析JSON时,仅当您要查找的内容不存在时,才会返回空值,即响应中没有“validity_days”字符串。否则,您将得到一个空字符串。只需检查null和/或空字符串就可以解决问题
此外,try-catch块将在android代码中处理此异常。如果希望确保在为空时始终返回特定值(例如,当字段为空时,您可能希望始终返回0而不是零),则可以修改PHP 为什么不使用普通的if-else方法?看不到变量
validity
的设置位置?@droidhot它只是一个片段代码太长了,只粘贴了一个片段。你用validity做了什么?在发生错误的几天里,我没有看到任何地方可以用Rarw从JSONAgree中提取这个字符串。发布一个片段很好,但它必须是完整的。为什么会引发异常。添加结果代码所要做的就是等待结果返回,然后在下一个活动中调用onCreate?