使用 InputStream 从网页获取数据?
Getting Data from a WebPage using InputStream?
我已经阅读了很多说明并非常努力地尝试了,但不知何故,仍然无法让我的 InputStream 正常工作。所以我转向你。预先感谢您的帮助!
我的 objective 是从一个空白的 HTML 网页获取数据并将其显示在我的 android 应用程序的 TextView 上。我在我的清单中包含了所有互联网权限,我的 XML 文件只是一个线性布局的文本视图。该应用程序只有一个名为 "scorereader" 的 class,仅此而已。当我运行它时,它只显示带有文本视图的空白 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();
}
}
}
HTML 来自 Tumblr 网站: - 顶部为 "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>
在此先感谢您!非常感谢。
使用 HttpGet
而不是 HttpPost
。 HttpGet
将执行 GET 请求而不是 POST 请求,这应该会正确下载网页。
注意日志中的消息
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);
}
}
}
我已经阅读了很多说明并非常努力地尝试了,但不知何故,仍然无法让我的 InputStream 正常工作。所以我转向你。预先感谢您的帮助!
我的 objective 是从一个空白的 HTML 网页获取数据并将其显示在我的 android 应用程序的 TextView 上。我在我的清单中包含了所有互联网权限,我的 XML 文件只是一个线性布局的文本视图。该应用程序只有一个名为 "scorereader" 的 class,仅此而已。当我运行它时,它只显示带有文本视图的空白 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();
}
}
}
HTML 来自 Tumblr 网站: - 顶部为 "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>
在此先感谢您!非常感谢。
使用 HttpGet
而不是 HttpPost
。 HttpGet
将执行 GET 请求而不是 POST 请求,这应该会正确下载网页。
注意日志中的消息
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);
}
}
}