私はHttpURLConnectionを使ってリモートURLコンテンツを取得しようとしていますが、空のresult.Byを取得し続けているのは、取得リクエストが実行されているのがわかりますが、アンドロイドはレスポンスを保存できません。このコード?事前に感謝します。アンドロイドでHttpURLConnectionを使用してリモートURLコンテンツを取得する方法は?
public String sendGetRequest() {
try {
StrictMode.setThreadPolicy(new Builder().permitAll().build());
HttpURLConnection myURLConnection = (HttpURLConnection) new URL("http://www.bbc.com").openConnection();
myURLConnection.setReadTimeout(60000);
myURLConnection.setConnectTimeout(60000);
myURLConnection.setRequestMethod("GET");
myURLConnection.setUseCaches(false);
myURLConnection.setDoInput(true);
myURLConnection.setDoOutput(true);
myURLConnection.setRequestProperty("Content-Type", "text/plain");
myURLConnection.setRequestProperty("User-Agent", "Dalvik/2.1.0 (Linux; U; Android 6.0;)");
myURLConnection.setRequestProperty("Connection", "Keep-Alive");
myURLConnection.addRequestProperty("Content-length", "");
OutputStream os = myURLConnection.getOutputStream();
os.close();
myURLConnection.connect();
BufferedReader in = new BufferedReader(new InputStreamReader(myURLConnection.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
sb.append(line);
}
in.close();
return sb.toString();
} catch (Exception e) {
}
return null;
}
と私は、ボタンのonclickのから上記の関数を呼び出す:
public Button but1;
//creating public method
public void init() {
but1 = (Button) findViewById(R.id.but1);
//wire our button
but1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String finalResult = sendGetRequest();
mWebView.loadUrl("javascript:displayIt(" + finalResult+ ")");
}
});
}
編集(使用バックグラウンド・プロセス):
public class DownloadTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String result = "";
URL url;
HttpURLConnection urlConnection = null;
try {
url = new URL(urls[0]);
urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = urlConnection.getInputStream();
InputStreamReader reader = new InputStreamReader(in);
int data = reader.read();
while (data != -1) {
char current = (char) data;
result += current;
data = reader.read();
}
return result;
} catch (Exception e) {
e.printStackTrace();
return "Failed";
}
}
}
setDoOutputはPOSTリクエスト用で、接続を開く前にbebforeを取得していますが、予想される結果を知っていません。また、なぜURLがjavascriptであるのですか? –