Java Android-从JSON获取byteArray字节[]
我有一个Json post服务,其中我必须传递2个整数参数Java Android-从JSON获取byteArray字节[],android,json,bytearray,Android,Json,Bytearray,我有一个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,
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应用到我的异步任务中。
我试图获取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;
}
反而
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 );
我不知道是否可以直接将137转换为字节,最好是从gson转换为
int[]
,然后再转换为byte[]
试试jsonObj.toString().getBytes();测试示例工作得很好,但是当我更改byte[]parsed=gson.fromJson(str,byte[].class)代码>带有Type bytesType=new-TypeToken(){}.getType();字节[]festmengeNew=gson.fromJson(str,bytesType)代码>eclipse出错:(我不知道哪里错了
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]);
}
}
{"GetImageResult":[137,80,78,
^