2016-04-01 12 views
0

ブラウザでURLを手動で実行すると、このJSONが返されます。org.json.JSONException:文字0での入力の終了

public List<String> GetTestResultsFromUserID(Integer userID){ 
    BufferedReader bufferedReader = null; 
    try { 
     URL url = new URL(AppConfig.Results_URL + "?userid=" + userID); 
     HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
     con.setRequestProperty ("Authorization", "Basic Z2FycmV0dGg6ZnJBc3Rpbmc0"); 
     bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     String result;      
     result = bufferedReader.readLine(); 
     return ProcessResultSetFromDatabase(result); 
    }catch(Exception e){ 
     Log.d("Exception in try", "Exception" + e.toString()); 
     return null; 
    }  
} 

そしてresultが、ここで処理されます:

private List<String> ProcessResultSetFromDatabase(String result){ 
    List<String> resultSet = new ArrayList<String>(); 
    try{ 
     JSONObject jObj = new JSONObject(result); 
     boolean error = jObj.getBoolean("error");  

     if (!error){ 
      for (int i=0; i<48; i++){ 
       JSONObject rSet = jObj.getJSONObject(Integer.toString(i)); 
       resultSet.add("Q: "+rSet.getString("question")+" Correct Ans: "+rSet.getString("correctanswer")+" Given Ans: "+rSet.getString("useranswer")+" Correct:"+(rSet.getString("correct")));         
      }  
     }else{ 
      resultSet.add("No results at the moment"); 
     }   
    }catch(JSONException e){ 
     e.printStackTrace(); 
    }    
    return resultSet; 
} 

注:渡されたときProcessResultSetFromDatabaseに渡された結果はnullであると思われるが、次のように

{ 
  "error": false, 
  "0": { 
    "question": "Using the information that 6.7 × 52 = 348.4, Find the value of: 6.7 × 520", 
    "useranswer": "3484", 
    "correctanswer": "3484", 
    "correct": "1" 
  }, 
  "1": { 
    "question": "Jane drives 50mph. London is 350 miles away. How long will it take?", 
    "useranswer": "5", 
    "correctanswer": "7", 
    "correct": "0" 
  }, 
  "2": { 
    "question": "74*3?", 
    "useranswer": "222", 
    "correctanswer": "222", 
    "correct": "1" 
  }, 
  "3": { 
    "question": "39+31?", 
    "useranswer": "70", 
    "correctanswer": "70", 
    "correct": "1" 
  } 
} 

コードがあります。

+0

「nullと思われる」実際に 'null'かどうかを確認できませんか? –

+0

@Intator_ – Piyush

+0

@RohitAryaを使用して解析する方が良いです。結果はbufferedReader(新しいInputStreamReader(con.getInputStream()))で、何も返されません。単に – bananabreadbob

答えて

0

JSON出力は"0":{"question":です。文字列と整数を渡すので、intを文字列に変換する必要があります。

for (int i=0; i<48; i++){ 


int tmpInt = i; 
String str= String.valueOf(i); 

       JSONObject rSet = jObj.getJSONObject(str); 
       resultSet.add("Q: "+rSet.getString("question")+" Correct Ans: "+rSet.getString("correctanswer")+" Given Ans: "+rSet.getString("useranswer")+" Correct:"+(rSet.getString("correct")));         
      } 
0

Iteratorを使用してデータを解析する必要があります。

JSONObject jObj = new JSONObject(result); 
if (jObj.length() > 0) { 

        Iterator<String> keys = jObj.keys(); 
        while (keys.hasNext()) { 
         String key = keys.next(); 
         JSONObject json= jObj.optJSONObject(key); 

         Log.e("json", json.toString()); 

         if (json!= null) { 
         resultSet.add("Q: "+json.getString("question")+" Correct Ans: "+json.getString("correctanswer")+" Given Ans: "+json.getString("useranswer")+" Correct:"+(json.getString("correct")));         
        } 
       } 
    } 
関連する問題