在json解析中遇到问题

时间:2013-06-28 12:38:15

标签: 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 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中进行一些更改。

请建议

3 个答案:

答案 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解析为整数..

相关问题