0

我找到了答案
在 Main Activity 的“onCreate”方法中包含以下两行:

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

我创建了一个 android 应用程序,它将从 URL 读取文本并在屏幕上显示文本。当我的输入是“ http://web.njit.edu/~halper/it114/l2d.txt ”时它会崩溃,但当我的输入是“ http://web.njit.edu/~halper/it114/l2d ”时它什么也不做.txt ”。我尝试添加 android.permission.INTERNET到 Manifest.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...

您也应该在发出网络请求的位置发布代码。看来您是在为自己做练习,所以我建议您在收到回复时只使用 Thread 并使用它的 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();
    }

请更正评论中的格式。祝你今天过得愉快 。_。/

于 2013-10-09T03:44:26.743 回答