2013-07-10 3 views
0

JSON API에서 모든 가치를 얻으려고하고 있습니다. 하나만 제외하고 거의 모든 것을 얻을 수있었습니다! 보시다시피, 이것은 서버의 JSON 출력입니다. 당신이 볼 수 있듯이JSON에서 마지막 값을 가져올 수 없습니다.

{ 
    "error":"", 
    "S8tf":{ 
     "infoToken":"wCfhXe", 
     "deleteToken":"gzHTfGcF", 
     "size":122484, 
     "sha1":"8c4e2bbc0794d2bd4f901a36627e555c068a94e6", 
     "filename":"Screen_Shot_2013-07-02_at_3.52.23_PM.png" 
    }, 
    "S29N":{ 
     "infoToken":"joRm6p", 
     "deleteToken":"IL5STLhq", 
     "size":129332, 
     "sha1":"b4a03897121d0320b82059c36f7a10a8ef4c113d", 
     "filename":"Stockholmsyndromet.docx" 
    } 
} 

는 각 문자열/"배열"이 무작위로 서버에서 생성되는 "FileID에"로 시작 (I 변경할 수 없습니다). 나는 아래의 코드를 사용하고 있는데, 나는 모든 값을 볼 수있다 : 파일 이름, 크기, sh1 등. 그러나 나는 "fileId"를 얻는 방법을 알아낼 수 없다. FileID에 (이 JSON에서)입니다 S8tf 및 S29N

내 코드 : 당신이 그것을 얻을하지 않은 경우, 나는 FileID에 일명 S8tf 및 S29N에서 값을 잡으려고 노력하고있어

public class FilesActivity extends SherlockActivity { 

    private static String TAG_FILENAME = "filename"; 
    private static String TAG_SIZE = "size"; 
    private static String TAG_ITOKEN = "infoToken"; 
    private static String TAG_DTOKEN = "deleteToken"; 
    private static String TAG_SHA1 = "sha1"; 

    private ListView lv; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.dblist); 

     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setTitle("Files"); 

     String response = null; 
     DefaultHttpClient httpClient = new DefaultHttpClient(); 
     ResponseHandler <String> resonseHandler = new BasicResponseHandler(); 
     HttpPost postMethod = new HttpPost("http://api.bayfiles.net/v1/account/files?session=of1903u3pj43c3can8rc33gc42"); 

     try { 
      JSONObject json = new JSONObject(); 
       json.put("filename", "error"); 

       postMethod.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8"))); 
       postMethod.setHeader("Content-Type", "application/json"); 
       response = httpClient.execute(postMethod,resonseHandler); 
       TextView txt = (TextView)findViewById(R.id.nodata); 
       JSONObject request = new JSONObject(response); 
       for (Iterator<?> keyIterator = request.keys(); keyIterator.hasNext();) { 
        String key = (String) keyIterator.next(); 
        JSONObject object = request.optJSONObject(key); 

        ArrayList<fileObject> objectList = new ArrayList<fileObject>(); 
        if (object != null) { 
         //Setting TAGs 
         TAG_FILENAME = object.getString("filename"); 
         TAG_SIZE = object.getString("size"); 
         TAG_ITOKEN = object.getString("infoToken"); 
         TAG_DTOKEN = object.getString("deleteToken"); 
         TAG_SHA1 = object.getString("sha1");    


         txt.setText(
           TAG_FILENAME + "\n" 
           + TAG_SIZE + "\n" 
           + TAG_ITOKEN + "\n" 
           + TAG_DTOKEN + "\n" 
           + TAG_SHA1 + "\n" 
           + txt.getText() 
           );      

         Log.d("log_tag", object.getString("filename")); 
        } 
       }   
     } 
     catch(Exception e) 
     {  
      e.printStackTrace(); 
      Log.d("log_tag", "Error: " + e.toString()); 

     } 
    } 
} 

, 다음은 난수와 서버에 의해 생산.

편집 : 너희들 덕분에 일 했어! 포스터가 그걸 알아 내고 짜증나는 것을 알기 때문에, 내가 한 것은 String fileId = key; 난 그냥 JSONObject documentation 보았다

if (object != null) { 
    fileObject obj = new fileObject(); 
    obj.setFileId(key); 
    obj.setFileName(object.getString("filename")); 
    obj.setSize(object.getString("size")); 
    obj.setInfoToken(object.getString("infoToken")); 
    obj.setDeleteToken(object.getString("deleteToken")); 
    obj.setSha1(object.getString("sha1")); 

    objectList.add(obj); 
    Log.d("fileId", key); // Shows both of the values! 
} 
+2

fileId가 'key'변수에 있습니다. – njzk2

답변

0

당신은 서버에서 응답을 나타내는 된 JSONObject에서 모든 키를 요청합니다. 이 키는 찾고있는 값입니다. 당신이 당신의 루프에서 첫 번째 줄 이후

System.out.println(key);

를 추가한다면, 당신은 인쇄 값 ('오류', 'S8tf', ...)를 볼 수 있습니다.

+0

System.out.orintln (key); –

+0

죄송합니다. 이제 S8tf 및 S29N과 같은 이름을 모두 가지고 있습니다. –

+0

죄송합니다. Android를 잊어 버렸습니다 .. 디버그하여 키 값을 확인하거나 Log.v()를 사용하여 가치는이다. 예, for 루프를 사용하기 때문에 여러 개의 로그 문을 사용해야합니다. 그게 당신의 문제를 해결합니까? – Joel

2

:이처럼 내 객체 루프, 내부

나는 getNames 같은 느낌() - 방법은 당신이 찾고있는 무슨 수 있습니다. 당신은 루프에 대한 당신의 첫 번째 부분을 살펴 ...

JSONObject request = new JSONObject(response); 

for (Iterator<?> keyIterator = request.keys(); keyIterator.hasNext();) { 

     String key = (String) keyIterator.next(); 
     JSONObject object = request.optJSONObject(key); 

을 경우

관련 문제