0

2 つの整数パラメーターを渡す必要がある Json ポスト サービスがあります。

  obj.put("id", par);
  obj.put("type", par2);

params を渡すと、Fiddler2 を使用して、サービスがこれを返すことがわかります。

{"GetImageResult":[137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,218,0,0,1,176,8,6,0,0,0,14,139,164,147,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,154,156,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,201,101,60,0,2,14,80,73......]}

しかし、この byteArray を asyncTask に入れることができません。を取得しようとしましたが、object.getJSONArray うまくいきません... アイデアはありますか?? 前もって感謝します!object.getJSONObjectobject.getString

@Override
public byte[] doInBackground(Object... params) {
    obj = new JSONObject();
    buffer = new byte[0];
    inputStream = null;
    hc = new DefaultHttpClient();
    String message = null;

    HttpPost p = new HttpPost(
            "http://10.0.41.39/EVT.DataService.WCF/ServiceSyncJSON.svc/rest/GetImage");

    try {
        int par = (Integer) params[0];
        int par2 = (Integer) params[1];
        obj.put("id", par);
        obj.put("type", par2);

    } catch (Exception ex) {
        ex.printStackTrace();
    }

    try {

        message = obj.toString();
        p.setEntity(new StringEntity(message, "UTF8"));
        p.setHeader("Content-type", "application/json");
        resp = hc.execute(p);
        entity = resp.getEntity();
        inputStream = entity.getContent();

        BufferedReader reader = new BufferedReader(new InputStreamReader(
                inputStream, "UTF-8"), 8);
        sb = new StringBuilder();
        String line = null;
        while ((line = reader.readLine()) != null) {
            sb.append(line + "\n");
        }
        JSONTokener tokener;
        tokener = new JSONTokener(sb.toString());

        obj = new JSONObject(tokener);

        String str = obj.getString("GetImageResult");
        Gson gson = new Gson();
        byte[] parsed = gson.fromJson(str, byte[].class);
        for (byte b : parsed) {
            System.out.println(b);
        }

    } catch (Exception e) {
        e.printStackTrace();

    }
    return buffer;

}
4

1 に答える 1

0

その代わり

byte[] parsed = gson.fromJson(str, byte[].class);

使用TypeToken:

import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;

....

Type bytesType = new TypeToken<byte[]>(){}.getType();

byte[] festmengeNew = gson.fromJson(str, bytesType ); 

それがあなたを助けることを願っています、

編集

テストのためだけに:

public static void main(String[] args) {
    byte[] festmenge= new byte[]{80,78,71,13,10,26,10,0,0,0,13,73,72,68,82,0,0,1,0,0,1,8,6,0,0,0,14,0,0,0,9,112,72,89,115,0,0,11,19,0,0,11,19,1,0,24,0,0,0,25,116,69,88,116,83,111,102,116,119,97,114,101,0,65,100,111,98,101,32,73,109,97,103,101,82,101,97,100,121,113,20,101,60,0,2,14,80,73}; 

    Gson gson = new Gson();

    String festmengeStr = gson.toJson(festmenge);


    Type collectionType = new TypeToken<byte[]>(){}.getType();

    byte[] festmengeNew = gson.fromJson(festmengeStr, collectionType); 

    for (int j=0; j<festmengeNew.length; j++) {
        System.out.format("%02X ", festmengeNew[j]);
    }   
}

出力:

50 4e 47 0d 0a 1a 0a 00 00 00 00 0d 49 48 44 52 00 00 01 00 00 01 08 06 00 00 00 00 00 00 00 09 70 48 59 73 00 00 00 0B 13 00 00 0B 13 01 00 74 45 58 74 53 6F 66 74 77 61 72 65 00 41 64 6F 62 65 20 49 6D 61 67 65 52 65 61 64 79 71 14 65 3C 00 02 0E 50 49

補足として

{"GetImageResult":[137,80,78,
                    ^ 

137 を直接バイトに変換できるかどうかはわかりませんが、gsonint[]からbyte[]

于 2013-09-18T13:29:24.507 に答える