0

我有一个 Json 邮政服务,我必须在其中传递 2 个整数参数

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

当我通过参数时,使用 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.getJSONArrayobject.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 0D 49 48 44 52 00 00 01 00 00 01 08 06 00 00 00 0E 00 00 00 09 70 48 59 73 00 00 0B 13 00 00 0B 13 01 00 18 00 00 00 19 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转换为字节,也许从gson转换为int[]和之后转换为更好byte[]

于 2013-09-18T13:29:24.507 回答