【问题标题】:Getting Data from a WebPage using InputStream?使用 InputStream 从网页获取数据?
【发布时间】:2015-01-02 22:56:56
【问题描述】:

我已经阅读了很多说明并非常努力地尝试,但不知何故,仍然无法让我的 InputStream 正常工作。所以我转向你。预先感谢您的帮助!

我的目标是从一个空白的 HTML 网页获取数据并将其显示在我的 android 应用程序的 TextView 上。我已在清单中包含所有 Internet 权限,并且我的 XML 文件只是线性布局中的文本视图。该应用程序只有一个名为“scorereader”的类,仅此而已。当我运行它时,它只显示带有 textview 的空白 XML。它不显示来自 HttpClient 的文本。

JAVA:scorereader.java

public class scorereader extends Activity {

    public void onCreate(Bundle savedInstanceState) {
    try
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainactivity); 

        TextView tv = (TextView)findViewById(R.id.resultbox);
        try{
            HttpClient httpclient = new DefaultHttpClient(); 
            HttpPost httppost = new HttpPost("http://greentapcore.tumblr.com/");
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream webs = entity.getContent();
            try{

                BufferedReader reader = new BufferedReader(new InputStreamReader(webs,"iso-8859-1"),8);
                tv.setText(reader.readLine()); 
                webs.close();

            }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString()); 
            }
        }catch(Exception e){
            Log.e("log_tag", "Error in HTTP connection "+e.toString());

        }

    }
    catch (Exception e)
    { 
        Log.e("ERROR", "ERROR IN CODE: " + e.toString()); 
        e.printStackTrace();

    }

} 

}

来自 Tumblr 站点的 HTML: - 顶部带有“hi”的完全空白页面。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>scoretrack</title>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>
  <body>
    hi
  </body>
</html>

提前非常感谢您!非常感谢。

【问题讨论】:

    标签: java android html


    【解决方案1】:

    使用HttpGet 代替HttpPostHttpGet 将执行 GET 请求而不是 POST 请求,这应该会正确下载网页。

    【讨论】:

    • 您好,谢谢您的回复!我按照说的做了,但我遇到了同样的问题。 LogCat 说:HTTP 连接错误 android.os.NetworkOnMainThreadException
    【解决方案2】:

    注意日志中的消息

    Error in HTTP connection android.os.NetworkOnMainThreadException
    

    在另一个线程中跟踪对服务器的请求

    private TextView tv;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.mainactivity);
            tv = (TextView)findViewById(R.id.resultbox);
            new Task().execute();
    
        }
    
        class Task extends AsyncTask<Void, Void, String>{
            @Override
            protected String doInBackground(Void... params) {
                try{
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://greentapcore.tumblr.com/");
                    HttpResponse response = httpclient.execute(httppost);
                    HttpEntity entity = response.getEntity();
                    InputStream webs = entity.getContent();
                    try{
                        StringBuilder result = new StringBuilder();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(webs,"iso-8859-1"),8);
                        String line;
                        while( (line = reader.readLine()) != null) {
                            result.append(line);
                        }
                        webs.close();
                        return result.toString();
    
                    }catch(Exception e){
                        Log.e("log_tag", "Error converting result "+e.toString());
                    }
                }catch(Exception e){
                    Log.e("log_tag", "Error in HTTP connection "+e.toString());
    
                }
                return null;
            }
    
            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                if(s != null){
                    tv.setText(s);
                }
            }
        }
    

    【讨论】:

    • 您好,感谢您的回复!我得到了那个确切的错误。您能否详细说明我应该如何解决它?我应该创建另一个类并从那里运行代码吗?谢谢!
    • 查看我的答案的变化
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多