-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 に変更を加える必要があります。

提案してください

4

3 に答える 3

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 を解析すると、探しているものが存在しない場合にのみ null 値が返されます。つまり、応答に「validity_days」文字列がありません。そうしないと、空の文字列が返されます。null や空の文字列をチェックするだけで問題が解決するはずです。

また、try catch ブロックは、Android コード内でこの例外を処理します。空の場合に常に特定の値を返すようにしたい場合は、PHP を変更できます (たとえば、フィールドが空白の場合、何も返さずに常に 0 を返したい場合があります)。

于 2013-06-28T12:54:05.553 に答える