0

次のクラスを使用して、Web サイトからデータを取得します。

public class GetMethodEx {
    public String getInternetData() throws Exception {
        BufferedReader in = null;
        String data = null;
        try {
            HttpClient client = new DefaultHttpClient();
            URI website = new URI("http://www.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();
                }
            }
        }
    }
}

そして、次のクラスは上記のクラスを使用して、取得したデータを画面に出力します。

public class HttpExample extends Activity {

    TextView httpStuff;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.httpex);
        httpStuff = (TextView) findViewById(R.id.tvHttp);
        GetMethodEx test = new GetMethodEx();
        String returnedData = null;         
        try {
            returnedData = test.getInternetData();
            httpStuff.setText(returnedData);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

「httpex」xml で「httpStuff」TextView を「loading...」に設定しました。今私が直面している問題は、アプリを実行すると、この「読み込み中...」で永遠に動かなくなることです。理由はありますか?

ありがとう。

PS: マニフェストに許可 "android.permission.INTERNET" を追加しました。


編集:実際には、正しい解決策を持つ重複した質問があります。とりあえずありがとう!

4

1 に答える 1

0

LogCat をチェックして、潜在的なエラー メッセージを探してください。AndroidManifest.xml でインターネット アクセス許可を要求していないと思います。

追加

<uses-permission android:name="android.permission.INTERNET" />

AndroidManifest.xml の application タグの外側

編集: また、UI スレッドでネットワーク リクエストを実行しないようにする必要があります。それ以降のバージョンの Android (Honeycombe 以降と私は信じています) では、NetworkOnMainThreadException が発生し、直面している問題が発生する可能性もあります。

AsyncTask を使用してこのリクエストを実行してみてください。ここで答えを見てください:

android.os.NetworkOnMainThreadException を修正するには?

于 2013-06-27T16:00:05.923 に答える