Php json解析中的问题

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

我必须下载一个演示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":""}]}
我在这里得到空值,这是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?