我必须下载一个演示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 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":""}]}
我在这里得到null就是扔错误。
是否有可能在android本身处理该异常?或者我必须在php中进行一些更改。
请建议
答案 0 :(得分:1)
在没有看到你的JSON解析器的情况下我觉得这个问题是因为你需要使用validity_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代码中处理此excpetion。如果要确保在空时返回特定值,则可以修改PHP(例如,当字段为空时,您可能希望始终重新设置0而不是任何内容)。
答案 1 :(得分:0)
根据你上面提到的例外情况,我认为你在这一行得到了例外:
startActivityForResult(intent, 1);
只需用
替换此行startActivity(intent);
并在其他活动中获取JSONString
Intent i = getIntent();
String str = i.getStringExtra("validity_days");
答案 2 :(得分:0)
为什么不在引发异常之前将变量validity_days
解析为整数..