3

API レベル 4 からこのコードを使用していますが、ICS までは常に機能していました。API レベル 14 以降、https URL を使用すると、このコード ブロックは常に POST ではなく GET メソッドを実行します。http URL を使用すると、コードは POST を実行し、すべて機能します。lvl14 以降に発生する例外は FileNotFoundException です。何が起こっているのか全く理解できません。助けてください。ありがとうございました。

private byte[] Post(byte[] Header, byte[] Body, String protocol) throws IOException, MyAppConnectionException
{
    HttpURLConnection urlConnection = null;
    byte[] responseData = null;

    try
    {
        String url = MyApp.getContext().getResources().getString(R.string.ServerEndPoint);
        URL u = new URL(url);
        urlConnection = (HttpURLConnection) u.openConnection();
        urlConnection.setConnectTimeout(15000);
        urlConnection.setReadTimeout(45000);
        urlConnection.setRequestProperty("CONTENT-TYPE", protocol);
        urlConnection.setDoOutput(true); 
        urlConnection.setDoInput(true);
        urlConnection.setChunkedStreamingMode(0);
        urlConnection.connect();
    }
    catch(IOException ioex)
    {
        throw new MyAppConnectionException();
    }

    if(urlConnection != null)
    {
        DataOutputStream outputStream = new DataOutputStream(urlConnection.getOutputStream());

        int msgLength = (int)(4 + Header.length + Body.length);

        outputStream.write(ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(msgLength).array());
        outputStream.write(Header);
        outputStream.write(Body);
        outputStream.flush();
        outputStream.close();

        if(urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK)
        {
            DataInputStream inputStream = new DataInputStream(urlConnection.getInputStream());

            int dataLength = inputStream.available();
            byte[] msgbLength = new byte[4];
            inputStream.read(msgbLength, 0, 4);
            int length = ByteBuffer.wrap(msgbLength).order(ByteOrder.LITTLE_ENDIAN).getInt();

            assert(dataLength == length);      

            responseData = new byte[length - 4];
            inputStream.readFully(responseData, 0, length - 4);
            inputStream.close();
        }
        urlConnection.disconnect();
    }

    return responseData;}
4

1 に答える 1

1

行方不明のようですurlConnection.setRequestMethod("POST");

http://developer.android.com/reference/java/net/HttpURLConnection.html#setRequestMethod(java.lang.String )

于 2012-09-28T18:09:32.100 に答える