Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android-从JSON获取byteArray字节[]_Android_Json_Bytearray - Fatal编程技术网

Java Android-从JSON获取byteArray字节[]

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,

我有一个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应用到我的异步任务中。 我试图获取
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,
                    ^