ウェブサイトからテキストを取得し、Android プログラムのラベルをバッファリングされたリーダーの最後の行に変更するこのコードがあります。
編集 - Mohsen Afshin の親切なアドバイスのおかげで、コードを更新しました
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(
"http://webpage.php");
URLConnection yc = url.openConnection();
yc.setDoOutput(true);
PrintStream ps = new PrintStream(yc
.getOutputStream());
ps.print("Name=Joe");
BufferedReader in = new BufferedReader(
new InputStreamReader(yc.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
display.setText(inputLine);
in.close();
} catch (IOException e) { // TODO Auto-generated catch
// block
e.printStackTrace();
display.setText("failed");
}
}
});
t.start();
現在、これはエミュレーターで完全に正常に機能しています。ただし、Android デバイスに配置すると、クラッシュします。インターネット接続を許可するように Android マニフェストを変更しました -
<uses-permission android:name="android.permission.INTERNET" >
</uses-permission>
どこに問題があるのか わかりません。奇妙なことに、一度は機能しました。再び動作しません。logcat は次のとおりです。
06-25 16:18:15.918: W/dalvikvm(9047): threadid=11: キャッチされない例外で終了するスレッド (group=0x411432a0) 06-25 16:18:15.923: E/AndroidRuntime(9047): 致命的な例外: スレッド-599 06-25 16:18:15.923: E/AndroidRuntime(9047): android.view.ViewRootImpl$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。06-25 16:18:15.923: E/AndroidRuntime(9047): android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4925) で 06-25 16:18:15.923: E/AndroidRuntime(9047): Android で。 view.ViewRootImpl.requestLayout(ViewRootImpl.java:950) 06-25 16:18:15.923: E/AndroidRuntime(9047): android.view.View.requestLayout(View.java:15461) 06-25 16:18: 15.923: E/AndroidRuntime(9047): android.view.View.requestLayout(View.java:15461) 06-25 16:18:15.923: E/AndroidRuntime(9047): android.view.View.
もっと知識のある人が私を助けてくれますか?