-1

我必须下载一个演示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.ini 中进行一些更改。

请建议

4

3 回答 3

1

在没有看到您的 JSON 解析器的情况下,我假设问题是因为您需要使用 valid_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。

于 2013-06-28T12:54:05.553 回答
0

根据您在上面放置的异常,我认为您在这一行得到了异常:

startActivityForResult(intent, 1);   

只需将此行替换为

startActivity(intent);

并在其他活动中获取 JSONString 作为

Intent i = getIntent();
String str = i.getStringExtra("validity_days");
于 2013-06-28T12:41:44.717 回答
0

为什么不在validity_days抛出异常之前将变量解析为整数..

于 2013-06-28T12:42:58.420 回答