単純な HTTP get を使用して Web ページから文字列を読み込もうとしています。しかし、エミュレーターでアプリを実行すると、厳密なポリシー違反が発生し、何も表示されません。ポリシー違反は「policy=31 violation=4」としてリストされます。permitNetwork() を ThreadPolicy の初期化に追加すると、LogCat から google.com がアドレスに解決されないことがわかります。明らかに、何かが欠けていますが、これがネットワーク操作を処理する方法であるという印象を受けました。
編集: HttpExampleActivity.java を変更しました。次のようになりました。
package com.android.httpexample;
import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.os.StrictMode.ThreadPolicy.Builder;
import android.widget.TextView;
public class HttpExampleActivity extends Activity {
TextView httpStuff;
@Override
public void onCreate(Bundle savedInstanceState) {
StrictMode.ThreadPolicy policy = new Builder().detectAll().penaltyLog().build();
StrictMode.setThreadPolicy(policy);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
new Thread(new Runnable() {
public void run() {
httpStuff = (TextView) findViewById(R.id.tvHttp);
httpStuff.post(new Runnable(){
public void run(){
GetProcedure test = new GetProcedure();
String returned;
try{
returned = test.getInternetData();
httpStuff.setText(returned);
} catch(Exception e){
e.printStackTrace();
}
}
});
}
}).start();
}
}
私の GetProcedure.java には、次のものがあります。
package com.android.httpexample;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
public class GetProcedure {
public String getInternetData() throws Exception {
BufferedReader in = null;
String data = null;
try{
HttpClient client = new DefaultHttpClient();
URI website = new URI("http://google.com");
HttpGet request = new HttpGet();
request.setURI(website);
HttpResponse response = client.execute(request);
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String l = "";
String nl = System.getProperty("line.separator");
while((l = in.readLine()) != null)
{
sb.append(l + nl);
}
in.close();
data = sb.toString();
return data;
}finally{
if(in != null){
try{
in.close();
return data;
}catch (Exception e){
e.printStackTrace();
}
}
}
}
}