我有一些代码可以下载一个 XML 文件,该文件已经在付费应用程序中发布了几年 - 直到我最近看到 HTC One 发生这种情况之前从未遇到任何问题。
想知道我是否遗漏了什么,或者是否应该在某个地方报告。
这是强制问题的示例代码:
package com.lutron.davetest;
import java.io.BufferedInputStream;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.view.Menu;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private TextView mainCenterText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainCenterText = (TextView) findViewById(R.id.mainCenterText);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Enter the IP address");
final EditText edit = new EditText(this);
builder.setView(edit);
builder.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mainCenterText.setText("");
String ip = edit.getText().toString();
new DownloadTask().execute(ip);
}
});
builder.create().show();
}
private class DownloadTask extends AsyncTask<String, Void, Void>{
@Override
protected Void doInBackground(String... params) {
try{
URL url = new URL("http", params[0], 80, "/file.xml");
URLConnection connection = url.openConnection();
InputStream in = new BufferedInputStream(connection.getInputStream());
byte buf[] = new byte[4096];
int len;
while((len = in.read(buf)) != -1 ) {
final String data = new String(buf, 0, len);
runOnUiThread(new Runnable() {
@Override
public void run() {
mainCenterText.append(data);
}
});
}
}catch(Exception e){
e.printStackTrace();
}
return null;
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
发生的情况是,在其他所有设备上,从流中读取时,您只能获取文件内容。
在 HTC One 上,您会得到 THIS,然后是文件内容:
onnection: close
Last-Modified: ???
Content-Type: text/html
这是 Android 4.1.2。
有没有办法配置 URLConnection 来避免这种情况?