我有一个Json post服务,我必须传递2个整数参数
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.getJSONObject
和object.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;
}
答案 0 :(得分: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[]