2016-06-07 23 views
0
  private static final String KEY_TRAINING_COUNT_READ ="trainingCountRead"; 
for (int i = 0; i < jsonArray.length(); i++) { 
        c = null; 
        c = jsonArray.getJSONObject(i); 

       training.setTrainingID(c.getInt(KEY_TRAINING_ID)); 
       training.setTrainingEvaluation(c.getInt(KEY_TRAINING_EVALUATION)); 
       training.setTrainingAim(c.getString(KEY_TRAINING_AIM)); 
       training.setTrainingExplanation(c.getString(KEY_TRAINING_EXPLANATION)); 
       training.setBehaviorID(c.getInt(KEY_BEHAVIOR_ID)); 
       training.setTrainingTotalQuestion(c.getInt(KEY_TRAINING_TOTAL_QUESTION)); 
       training.setTrainingHood(c.getString(KEY_TRAINING_HOOD)); 
       training.setTrainingCreateTime(c.getString(KEY_TRAINING_CREATE_TIME)); 
       training.setTrainingOK(c.getInt(KEY_TRAINING_OK)); 

       if(c.getString (KEY_TRAINING_NAME_READ) != null) { 
        training.setTrainingNameRead(c.getInt(KEY_TRAINING_NAME_READ)); 
       } 

       if(c.getString (KEY_TRAINING_SHAPE_READ) != null) { 
        training.setTrainingShapeRead (c.getInt(KEY_TRAINING_SHAPE_READ)); 
       } 

       if(c.getString (KEY_TRAINING_COLOR_READ) != null) { 
        training.setTrainingColorRead (c.getInt(KEY_TRAINING_COLOR_READ)); 
       } 

       if(c.getString (KEY_TRAINING_COUNT_READ) != null) { 
        training.setTrainingCountRead (c.getInt(KEY_TRAINING_COUNT_READ)); 
       } 

误差是JSON空误差的Android

org.json.JSONException:在 类型的trainingCountRead值null org.json.JSONObject $ 1不能被转换为int 12月6日至7日:33:15.784 17830-17830/com.example。 W/System.err的:

if(c.getString (KEY_TRAINING_COUNT_READ) != null) { 
        training.setTrainingCountRead (c.getInt(KEY_TRAINING_COUNT_READ)); 
       } 

值是

training: [ 
    { 
    trainingID: "154", 
    trainingEvaluation: "81", 
    trainingAim: "Şekil Eğitimi", 
    trainingHood: "3 temel şekli basit geometrik şekiller ile öğretme", 
    trainingExplanation: "3 temel şekli basit geometrik şekiller ile öğretme", 
    behaviorID: "3", 
    trainingTotalQuestion: "33", 
    trainingOK: "1", 
    trainingCreateTime: "1464647671", 
    trainingNameRead: "0", 
    trainingShapeRead: "1", 
    trainingColorRead: "1", 
    trainingCountRead: null 

我检查空的,为什么它里面去,即使它是空?

} }catch (JSONException e) { 
    e.printStackTrace(); 
    Log.d(TAG, "checkdatabase hata,jsnarytrainingset"); 
    Toast.makeText(context, "Islem basarisiz, lutfen hocanızla iletisime geciniz...", Toast.LENGTH_LONG).show(); 
    Intent intent = new Intent(context, MainActivity.class); 
    intent.putExtra("username", username); 
intent.putExtra("wasDbExisted", true); 
    context.startActivity(intent); 
    ((Activity) context).finish(); 

} 
+0

尝试打印c.getString(KEY_TRAINING_COUNT_READ)值 – Chol

+0

和你所要求的一个字符串,但期待INT ... – Chol

+0

为Log.d(TAG, “c.getString(KEY_TRAINING_COUNT_READ)” 日志c.getString (KEY_TRAINING_COUNT_READ)null – user6412889

回答

0

尝试使用:

if(c.getString (KEY_TRAINING_COUNT_READ) != null && !c.getString (KEY_TRAINING_COUNT_READ).equalsIgnoreCase("null")) { 
        training.setTrainingCountRead (c.getInt(KEY_TRAINING_COUNT_READ)); 
      } 
0

当JSON密钥的值是null,解析的JSONObject它作为"null"(字符串)。如果你比较下面它会返回true。

c.getString(KEY_TRAINING_COUNT_READ).equals("null");

参考JSONObject文档了解更多信息:https://developer.android.com/reference/org/json/JSONObject.html

您还可以使用JsonReader解析JSON。它将JSON读取为令牌流,您可以将null值与Enum JsonToken.NULL进行比较。

无论JSON大而复杂,我更喜欢JsonReader。在你的情况下,我会说使用JSONObject(你已经在使用它)。只需创建一个带有"null"值的最终字符串变量,而不是将JSON字符串与null进行比较,然后将其与最终变量进行比较。