1

Android 3.0のテキストビューにWebページからテキストを入れたいです。私はこのコードを持っています:

public class Biografie extends Activity {
    private TextView outtext;
    private String HTML;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_biografie);

        outtext= (TextView) findViewById(R.id.textview1); 

        try { 
        getHTML();
    } catch (Exception e) {
        e.printStackTrace();
    }       
    outtext.setText("" + HTML);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.biografie, menu);
        return true;
    }

    private void getHTML() throws ClientProtocolException, IOException 

    {
        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpGet httpGet = new HttpGet("http://artistone.appone.nl/api/biografie.php?dataid=998"); //URL!
        HttpResponse response = httpClient.execute(httpGet, localContext);
        String result = "";

        BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

        String line = null;
        while ((line = reader.readLine()) != null) {
            result += line + "\n";
            HTML = result;
        }

    }

}

私の TextView は、ページのテキストではなく「null」を返します。これを修正するのを手伝ってください。よろしくお願いします。

4

2 に答える 2

0

問題はNetworkOnMainThreadException 、メインスレッド(アクティビティのスレッド)でネットワークコンテンツをダウンロードしているためです。

代わりに、バックグラウンドスレッドを使用してそのコンテンツをダウンロードするか、 AsynchTaskを使用する必要があります。

この問題を修正する必要がある簡単なコード:

    final Handler handler = new Handler();
    Thread thread = new Thread() {
        public void run() {
            try {
                getHTML();
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        outtext.setText("" + HTML);

                    }
                });
            } catch (Exception e) {
                e.printStackTrace();
                    handler.post(new Runnable() {
                    @Override
                    public void run() {
                        outtext.setText(e.toString());

                    }
            }
        }
    };
thread.start(); // I forgot to start the thread. sorry !

それ以外の :

    try { 
           getHTML();
    } catch (Exception e) {
        e.printStackTrace();
     }       
    outtext.setText("" + HTML);

また、Androidスレッドに関するこのチュートリアルもご覧ください:チュートリアル

于 2013-02-26T17:13:41.390 に答える
0

コードを次のように変更します。

while ((line = reader.readLine()) != null) {
    result += line + "\n";
}
HTML = result;

これを試してください: outtext.setText(Html.fromHtml(HTML));

そして、メインスレッドでネットワークアクションを実行する代わりに、別のスレッドでこれを行うことをお勧めしますAsyncTask

于 2013-02-26T16:59:33.223 に答える