0

JSONこんにちは、API から一部を解析するアプリケーションに取り組んでいます。私はこれを機能させ、すべての情報を表示しています。私が今直面している問題は、"FileID"から取得できないように見えることですJSON String:

出力は次のようになります。

{ error: "", <fileId>: { infoToken: <string>, deleteToken: <string>, size: <int>, sha1: <string>, filename: <string> } }

"fileID"、ファイルごとにランダムに生成されます。どうすればそれをキャッチして解析できますか? 他のすべての情報は問題なく取得できます。取得する必要があるのは"fileId"

それで、それが終わったら、すべての情報を収集してに入れたいのですが、ListView受け取ったすべてのアイテムをループする必要があります。

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";


    @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=<sessionId>");

        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);

                   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());

        }
    }
}

どんな助けでも大歓迎です!

編集:これを試しましたが、うまくいくかどうかわかりません:

ArrayList<fileObject> objectList = new ArrayList<fileObject>();
                   if (object != null) {

                       fileObject obj = new fileObject();

                       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("log_tag", object.getString("filename"));
                   }
                   adapter = mView.new fileObjectAdapter(mContext);
                   setListAdapter(adapter);
                   adapter.addAll(objectList); //if honeycomb or higher
                   for (fileObject obj : objectList) {
                       adapter.add(obj);
                       }

そして私のアダプター:

package com.dev.jsontest.adapter;


import com.dev.jsontest.R;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;

public class fileObjectAdapter extends ArrayAdapter<fileObject> {

    public fileObjectAdapter(Context context) {
        super(context, 0);
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.dbitems, parent, false);
        }

        final fileObject item = getItem(position);

        //define your view that you want each list item to look like. Make sure to set every field in your view.

        return convertView;
    }
}

ファイルオブジェクト:

package com.dev.jsontest.adapter;

public class fileObject {

    private String fileName;
    private String size;
    private String infoToken;
    private String deleteToken;
    private String sha1;

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getSize() {
        return size;
    }

    public void setSize(String size) {
        this.size = size;
    }

    public String getInfoToken() {
        return infoToken;
    }

    public void setInfoToken(String infoToken) {
        this.infoToken = infoToken;
    }

    public String getDeleteToken() {
        return deleteToken;
    }

    public void setDeleteToken(String deleteToken) {
        this.deleteToken = deleteToken;
    }

    public String getSha1() {
        return sha1;
    }

    public void setSha1(String sha1) {
        this.sha1 = sha1;
    }
}
4

3 に答える 3

1

これはあなたの質問に詳細に答えるものではありませんが、一般的に、フレームワークにすべての解析を行わせると役立つ場合があります:)

多分ジャクソンはあなたのためのものですか?( http://wiki.fasterxml.com/JacksonInFiveMinutes )

于 2013-07-10T10:56:32.993 に答える
0

fileidに名前を変更してfile、その配列内のフィールドを fileidにしないのはなぜですか? (のようにfileid: <fileid>)

または、受信する JSON 文字列を変更できませんか?

于 2013-07-10T10:35:15.220 に答える
0

json のすべてのキー (最初のレベルから) に「アクセス」する必要があると思います。次のようなことを試してください:

String jsonString = "{ \"error\": \"\", \"<fileId>\": { \"infoToken\": \"<string>\", \"deleteToken\": \"<string>\", \"size\": \"<int>\", \"sha1\": \"<string>\", \"filename\": \"<string>\" } }";
    try {
        JSONObject json = new JSONObject(jsonString);
        Iterator<String> it = json.keys();
        while(it.hasNext()){
            String key = it.next();

            if(!"error".equals(key)){
                String fileId = key;
                JSONObject fileIdJsonObj = json.getJSONObject(fileId);
            }
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
于 2013-07-10T12:55:42.620 に答える