i found a code but sometimes have error :
StringBuilder strHeaders = new StringBuilder();
char c;
while ((c = (char)stream.read()) != -1) {
strHeaders.append(c);
if (strHeaders.length() > 5 && (strHeaders.substring((strHeaders.length() - 4), strHeaders.length()).equals("\r\n\r\n"))) {
// end of headers
break;
}
}
logcat
java.lang.OutOfMemoryError
at java.lang.AbstractStringBuilder.enlargeBuffer(AbstractStringBuilder.java:95)
at java.lang.AbstractStringBuilder.append0(AbstractStringBuilder.java:140)
at java.lang.StringBuilder.append(StringBuilder.java:125)
at myApp.activity.com.getFromPLS.retreiveMetadata(getFromPLS.java:98)
at myApp.activity.com.getFromPLS.refreshMeta(getFromPLS.java:76)
at myApp.activity.com.myApp$1.run(myApp.java:371)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3683)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
at dalvik.system.NativeStart.main(Native Method)
error on this line
strHeaders.append(c);
please any one can help me to fix this ?
Since
charis an unsigned type, yourwhileloop condition will never be satisfied, even afterstream.read()starts returning -1. If you don’t find a"\r\n\r\n"sequence, the loop will never end. Write the loop like this:Note that many servers will incorrectly return
"\n\n"as the blank line that signals the end of the header. Some may also return"\r\r". Unless you control the server output and are guaranteed that it will see"\r\n\r\n", your blank-line detection method needs to be written in a more robust manner.