0

メイン アクティビティの「 onCreate
」メソッドに次の 2 行を含めます。

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();   
StrictMode.setThreadPolicy(policy); 

URL からテキストを読み取り、画面にテキストを表示する Android アプリを作成しました。入力が「 http://web.njit.edu/~halper/it114/l2d.txt 」の場合はクラッシュしますが、入力が「http://web.njit.edu/~halper/it114/l2dの場合は何もしません」.txt ". android.permission.INTERNETManifest.xmlに追加しようとしました が、それでも同じ結果が得られます。
致命的な例外: main
java.lang.IllegalStateException: アクティビティのメソッドを実行できませんでした
原因: java.lang.reflect.InvocationTargetException
原因: android.os.NetworkOnMainThreadException
お時間をいただきありがとうございます

public void enter(View v) {

EditText input = (EditText) findViewById(R.id.edit_file);
TextView tv = (TextView) findViewById(R.id.text_main);

try {
URL url = new URL( input.getText().toString() );            
Scanner scan = new Scanner( url.openStream() );
while( scan.hasNext() ) 
tv.append( scan.nextLine() );   
}

catch(MalformedURLException e) { e.printStackTrace(); }
catch(IOException e) {e.printStackTrace();}
}
4

2 に答える 2

0
Caused by: android.os.NetworkOnMainThreadException

HoneyComb 以降、UI スレッドでネットワーク呼び出しを行うことは許可されていません。これは、ネットワーク呼び出しが遅くなる可能性があり、サーバーで待機している間に UI をハングアップさせるのはばかげているためです。ネットワーク コードを別のThreadに配置するか、 AsyncTask、または Volley などのライブラリを使用する必要があります。

これが単にテストするためのものである場合は、そのスレッドからのネットワークアクセスを禁止するStrictModeを有効にすることもできます...

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy); //Disabling StrictMode is not recommended. It is much better to make Asynchronous network calls...

ネットワーク要求を行う場所にもコードを投稿する必要があります。あなたは自分で演習を行っているようです。そのため、スレッドを使用し、応答が得られたらその runOnUiThread() メソッドを使用することをお勧めします。AsyncTask には必要以上の機能があります...

于 2013-10-10T00:54:33.173 に答える
0

これは私のために働いています:

    public String getTextFromTheMagicKingom() throws ClientProtocolException, IOException {
        String url = "http://web.njit.edu/~halper/it114/l2d.txt";
        HttpClient client = new DefaultHttpClient();
        HttpGet request = new HttpGet(url);
        HttpResponse response = client.execute(request);
        BufferedReader rd = new BufferedReader(
            new InputStreamReader(response.getEntity().getContent()));

        StringBuffer result = new StringBuffer();
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line);
        }
        return result.toString();
    }

そして、コメントの形式を修正してください。良い1日を 。_。/

于 2013-10-09T03:44:26.743 に答える