アンドロイドのui更新

5869 ワード

最近ずっとアプリを作りながらアンドロイドのことを勉強していますが、以前はアンドロイドの具体的な内容をよく知らなかったので、アンドロイドについては一面的なものに触れただけです.それから今アンドロイドappをする過程で、1つの需要に出会って、つまり1つのホームページの内容を要求して、それからホームページの内容をアンドロイドのappの中に表示して、それからネットの要求を使う時、いつもスレッドの間違いを報告して、内容を表示することができません.さらに理解すると、私が要求したページが多すぎて、メインスレッドが応答できないことがわかりました.スレッドを使用してWebコンテンツをロードします.
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.layout_main);
    text = (TextView) findViewById(R.id.text);
    String context;
    new Thread(){
        StringBuffer sb = new StringBuffer();
        URL url = null;
        try {
            url = new URL(surl);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.connect();
            InputStream in = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            String result = null;
            while((result = br.readLine())!=null){
                sb.append(result);
                System.out.println(result);
            }
            in.close();
            conn.disconnect();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        context = result.toString();
        Log.i("text",context);
    }
    }.start();
    text.setText(context);
}

その後、ページがロードされていないことに気づきましたが、コンソールにページを出力すると、今度はコンテンツが表示され、ページの内容を読み取るスレッドが正常に動作します.
さらに理解すると、アンドロイドのuiロードは別のスレッドであり、uiを更新するにはuiスレッドを介してコンテンツをリアルタイムで更新しなければならないことが分かった.アンドロイドのuiをリアルタイムで更新するには2つの方法があります.現在は主に1つを紹介し、もう1つは後で更新します.
runOnUIThread()によるAndroid uiのリアルタイム更新
以上のコードを以下のように変更します.
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.layout_main);
    text = (TextView) findViewById(R.id.text);
    String context;
    new Thread(){
        StringBuffer sb = new StringBuffer();
        URL url = null;
        try {
            url = new URL(surl);
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();
            conn.setRequestMethod("POST");
            conn.connect();
            InputStream in = conn.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));
            String result = null;
            while((result = br.readLine())!=null){
                sb.append(result);
                System.out.println(result);
            }
            in.close();
            conn.disconnect();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        context = result.toString();
        Log.i("text",context);
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                text.setText(content1);
            }
        });
    }
    }.start();
    text.setText(context);
}

runOnUIThreadによりアンドロイドのuiスレッドでuiコンテンツを更新します.