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;}