Android Can';无法从JSON获取最后一个值

Android Can';无法从JSON获取最后一个值,android,arrays,json,eclipse,string,Android,Arrays,Json,Eclipse,String,我试图从JSON API中获取所有的值,我已经设法获得了几乎所有的值,除了一个!如您所见,这是服务器的JSON输出。(我不能改变它) 如您所见,每个字符串/“数组”都以“fileId”开头,这是从服务器随机生成的。我正在使用下面的代码,我可以看到所有的值,如:filename、size、sh1等,但我似乎不知道如何获取“fileId”。文件ID是(在这个json中)S8tf和S29N 我的代码: public class FilesActivity extends SherlockActivit

我试图从JSON API中获取所有的值,我已经设法获得了几乎所有的值,除了一个!如您所见,这是服务器的JSON输出。(我不能改变它)

如您所见,每个字符串/“数组”都以“fileId”开头,这是从服务器随机生成的。我正在使用下面的代码,我可以看到所有的值,如:filename、size、sh1等,但我似乎不知道如何获取“fileId”。文件ID是(在这个json中)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());

        }
    }
}
我只是看了一下:


我觉得getNames()-方法可能就是您正在搜索的方法

如果您查看for循环的第一部分

JSONObject request = new JSONObject(response);

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

         String key = (String) keyIterator.next();
         JSONObject object = request.optJSONObject(key);
JSONObject请求=新的JSONObject(响应);
for(迭代器keyIterator=request.keys();keyIterator.hasNext();){
字符串键=(字符串)键迭代器.next();
JSONObject object=request.optJSONObject(key);
您从JSONObject请求表示您从服务器响应的所有键。这些键是您要查找的值。如果要添加

System.out.println(键);


在循环的第一行之后,您将看到打印出来的值('error','S8tf',…)。

您的文件ID位于'key'变量中。很抱歉,我现在得到了这两个名称,如S8tf和S29NOh。对不起,忘了我们在Android中。调试并检查key的值或使用Log.v()要查看值是什么。是的,因为您在for循环中,所以应该得到多个log语句。这解决了您的问题吗?我让它工作了,谢谢您:)没问题:)非常感谢!只在“if object”循环中使用putte:)
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!
}
JSONObject request = new JSONObject(response);

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

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