0

Androidのhttppostを使用して複数バイトの配列を投稿したい。BYTEARRAYENTITYを使用して単一バイト配列を投稿することに成功していますが、単一のリクエストで複数バイト配列を投稿すると、コードで何を変更する必要がありますか?

私は以下のようにコードを書きます。これは1バイトの配列を投稿するのにうまく機能します。しかし、ソリューションが複数バイトの配列をポストするのを待っています。

public String postData2s(String URL, String data) {
    String filesizes = "";
    BufferedReader bufferedReader = null;
    String strresponse = "";
    byte[] byteArray = null;
    byteArray = data.getBytes();
    filesizes = byteArray.length + "";
    URL = URL + "&" + "fileSizes=" + filesizes;
    final DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost request = null;
    try {
        request = new HttpPost(URL);
    } catch (Exception e) {

    }
    HttpResponse response = null;
    ByteArrayEntity arrayEntity = new ByteArrayEntity(byteArray);
    try {
        arrayEntity.setContentType("text/xml");
        request.setEntity(arrayEntity);
        response = httpClient.execute(request);
        bufferedReader = new BufferedReader(new InputStreamReader(response
                .getEntity().getContent()));
        StringBuffer stringBuffer = new StringBuffer("");
        String line = "";
        String LineSeparator = System.getProperty("line.separator");
        while ((line = bufferedReader.readLine()) != null) {
            stringBuffer.append(line + LineSeparator);
        }
        bufferedReader.close();
        Log.e("response ", stringBuffer.toString());
        strresponse = stringBuffer.toString();
    } catch (ClientProtocolException e) {
        strresponse = "";
        e.printStackTrace();
    } catch (IOException e) {
        strresponse = "";
        e.printStackTrace();
    } finally {
        if (bufferedReader != null) {
            try {
                bufferedReader.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    return strresponse;
}

私のC#の同僚は、次のコードを使用してWindows用の複数バイト配列を投稿しています

 webRequest.ContentLength = size;

                Stream requestStream = webRequest.GetRequestStream();

                // Escribo cada uno de los archivos en el stream

                for (int i = 0; i < arrBytes.Length; i++)

                    requestStream.Write(arrBytes[i], 0, arrBytes[i].Length);

                requestStream.Close();

誰かがこれについて考えているなら、できるだけ早く私に答えてください

ありがとう

4

1 に答える 1

0

以下の方法を使用してデータを投稿しています。これには、文字列形式のフィールドの 1 つとして byteArray も含まれます。複数のバイト配列で複数のフィールドを使用することができ、それは仕事をします。

コード:

public static String UpdateUser(String userIdValue, String userNameValue, String nameValue,
        String emailIdValue, String contryIdValue,String countryNameValue, String stateValue, String cityValue ,String imageBytes){
    String res = null;

    HttpPut request = new HttpPut(USER_URL);
    //request.setHeader("Accept", "application/json");
    request.setHeader("Content-type", "application/json");
    //request.setHeader("user-agent", "Yoda");
    try {

        //-----------------
        /*InputStream is = new BufferedInputStream (getResources().openRawResource(R.drawable.images));
        JSONArray array=readBytes(is);
        is.close(); */
        //----------------
        // Build JSON string
        JSONStringer jObject = new JSONStringer()
            .object()
                //.key("Get")
                  //  .object()
                        .key("Userid").value(userIdValue)
                        .key("UserName").value(userNameValue)
                        .key("Name").value(nameValue)
                        .key("EmailId").value(emailIdValue)
                        //.key("Password").value("")
                        .key("CountryId").value(contryIdValue)
                        .key("CountryName").value(countryNameValue)
                        .key("State").value(stateValue)
                        .key("City").value(cityValue)
                        .key("ImageByteArray").value(imageBytes)
                        /*.key("UserVerification").value("")
                        .key("City").value("")
                        .key("City").value("")*/
                   // .endObject()
                .endObject();

        StringEntity entity = new StringEntity(jObject.toString());
        //System.out.println("Our Res: "+jObject.toString());

        request.setEntity(entity);

        // Send request to WCF service
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpResponse response = httpClient.execute(request);
        //res = response.toString();
        int resCode = response.getStatusLine().getStatusCode();
        System.out.println("Our Res: "+jObject.toString());
        System.out.println("Result code: "+resCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
        String line="";
        StringBuffer returnFromServer = new StringBuffer();
        while ((line=in.readLine())!=null){
            returnFromServer.append(line);
        }
        //Toast what we got from server
        //Toast.makeText(getApplicationContext(),returnFromServer.toString(), Toast.LENGTH_LONG).show(); 
        System.out.println("Responce: "+returnFromServer.toString());
        res = returnFromServer.toString();

        if (entity != null){
            entity.consumeContent();
        }
        // Toast.makeText(getApplicationContext(),response.getStatusLine().getStatusCode()+"", Toast.LENGTH_LONG).show();
    }catch(Exception e){
        e.printStackTrace();
    }

    System.out.println("Responcre is:"+res);
    return res;

}

あなたが持っているbyteArrayの数として追加のパラメータを追加するだけです。

それがあなたに大いに役立つことを願っています。

コーディングをお楽しみください。

于 2013-02-06T06:10:42.677 に答える