Android的读取互联网文本文件互联网、文本文件、Android

2023-09-07 23:44:36 作者:情长旧忆

我想读远程文本文件,并显示其在一个TextView的内容。我已经写了这以下code,但它不会从文本文件中的任何信息。 我如何才能找到这个问题的原因或解决吗? 是不是有什么错在我的code?

 私人无效READFILE()
    {
         尝试 {
            字符串路径=htt​​p://host.com/info.txt;
            网址U =新的URL(路径);
            HttpURLConnection的C =(HttpURLConnection类)u.openConnection();
            c.setRequestMethod(GET);
            c.setDoOutput(真正的);
            c.connect();
            在的InputStream = c.getInputStream();
            Log.e(价值,in.toString());
            AssetManager mngr = getAssets();
            ByteArrayOutputStream博=新ByteArrayOutputStream();
            byte []的缓冲区=新的字节[1024];
            in.read(缓冲液); //读自缓冲区。
            bo.write(缓冲液); //写入缓冲区。
            TextView的文字=(TextView的)findViewById(R.id.TextView1);
            text.setText(bo.toString());
            bo.close();
            }
         赶上(NetworkOnMainThreadException E){
        }
            赶上(MalformedURLException的E){
            e.printStackTrace();
            }赶上(FileNotFoundException异常E){
            e.printStackTrace();
            }赶上(IOException异常E){
            e.printStackTrace();
            }
    }
}
 

解决方案 你有没有加入网络权限的清单文件? 你启动你的code。在单独的线程(请不要赶NetworkOnMainThreadException) 检查LogCat中你有什么异常? 删除 c.setDoOutput(真); 这是用来将数据发送到服务器。

下面就应该是这样:

 新的Thread(){
            @覆盖
            公共无效的run(){
                字符串路径=htt​​p://host.com/info.txt;
                URL U = NULL;
                尝试 {
                    U =新的URL(路径);
                    HttpURLConnection的C =(HttpURLConnection类)u.openConnection();
                    c.setRequestMethod(GET);
                    c.connect();
                    在的InputStream = c.getInputStream();
                    最后ByteArrayOutputStream博=新ByteArrayOutputStream();
                    byte []的缓冲区=新的字节[1024];
                    in.read(缓冲液); //读自缓冲区。
                    bo.write(缓冲液); //写入缓冲区。

                    runOnUiThread(新的Runnable(){
                        @覆盖
                        公共无效的run(){
                            TextView的文字=(TextView的)findViewById(R.id.TextView1);
                            text.setText(bo.toString());
                            尝试 {
                                bo.close();
                            }赶上(IOException异常E){
                                e.printStackTrace();
                            }
                        }
                    });

                }赶上(MalformedURLException异常E){
                    e.printStackTrace();
                }赶上(的ProtocolException E){
                    e.printStackTrace();
                }赶上(IOException异常E){
                    e.printStackTrace();
                }

            }
        }。开始();
 
Android课程讲义 互联网文档类资源 CSDN下载

I want to read a remote text file and show its content in a textview. I have written this below code, but it doesn't get any information from the text file. How can I find the reason of this problem or solve it? isn't there anything wrong in my code?

    private void readFile()
    {
         try {
            String path ="http://host.com/info.txt";
            URL u = new URL(path);
            HttpURLConnection c = (HttpURLConnection) u.openConnection();
            c.setRequestMethod("GET");
            c.setDoOutput(true);
            c.connect();
            InputStream in = c.getInputStream();
            Log.e("value",in.toString());
            AssetManager mngr=getAssets();
            ByteArrayOutputStream bo = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            in.read(buffer); // Read from Buffer.
            bo.write(buffer); // Write Into Buffer.
            TextView text = (TextView) findViewById(R.id.TextView1);
            text.setText(bo.toString());
            bo.close();
            }
         catch (NetworkOnMainThreadException e) {
        }
            catch (MalformedURLException e) {
            e.printStackTrace();
            } catch (FileNotFoundException e) {
            e.printStackTrace();
            } catch (IOException e) {
            e.printStackTrace();
            }
    }
}

解决方案

Did you added internet permission to your Manifest file? Are you launching your code in separate thread (please don't catch NetworkOnMainThreadException) Check LogCat what exception do you have? Removed c.setDoOutput(true); this is used to send data to server.

Here how it should be:

new Thread() {
            @Override
            public void run() {
                String path ="http://host.com/info.txt";
                URL u = null;
                try {
                    u = new URL(path);
                    HttpURLConnection c = (HttpURLConnection) u.openConnection();
                    c.setRequestMethod("GET");
                    c.connect();
                    InputStream in = c.getInputStream();
                    final ByteArrayOutputStream bo = new ByteArrayOutputStream();
                    byte[] buffer = new byte[1024];
                    in.read(buffer); // Read from Buffer.
                    bo.write(buffer); // Write Into Buffer.

                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            TextView text = (TextView) findViewById(R.id.TextView1);
                            text.setText(bo.toString());
                            try {
                                bo.close();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                        }
                    });

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

            }
        }.start();