【问题标题】:Reading text from website doesnt work (BufferedReader, InputStream) Android, Eclipse从网站读取文本不起作用(BufferedReader、InputStream)Android、Eclipse
【发布时间】:2013-04-30 02:22:22
【问题描述】:

我正在尝试从网站读取文本。我正在使用教程。 这是我的java代码

package nl.liacs.team6.stapp;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.TextView;

public class Jokes extends Activity {

public void onCreate(Bundle savedInstanceState) {

    try 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.jokes);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        //dit is t textview element, gevonden door id van de XML layout jokes
        TextView myListView = (TextView)findViewById(R.id.netResult);

        //proberen met internet te connecten
        try{
            //maak nieuw client object
            HttpClient httpclient = new DefaultHttpClient();

            //post to onze url, site is voorbeeld
            HttpPost httppost = new HttpPost("http://ephemeraltech.com/demo/android_tutorial20.php");

            //voor post uit en get response
            HttpResponse response = httpclient.execute(httppost);

            //get message from response
            HttpEntity entity = response.getEntity();

            //get content van message
            InputStream webs = entity.getContent();

            //nu hebben we response, convert to string

            try
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(webs, "iso-8859-1"), 8);

                //lees 1 lijn van text
                myListView.setText(reader.readLine());
                //sluiten
                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){
}

}// onCreate
}// Jokes

这里是xml布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
    android:textIsSelectable="true"
    android:id="@+id/netResult"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

是的,我向 android manifest 添加了权限

当我运行它时什么都没有显示

谁能帮助我?我不知道我做错了什么

这是日志

 05-06 10:39:15.501: W/NetworkManagementSocketTagger(887): setKernelCountSet(10012, 0)   failed with errno -2
 05-06 10:39:16.371: I/ActivityManager(887): START {cmp=nl.liacs.team6.stapp/.Info} from pid 1488
 05-06 10:39:16.371: W/WindowManager(887): Failure taking screenshot for (180x300) to layer 21010
 05-06 10:39:16.660: I/ActivityManager(887): Displayed nl.liacs.team6.stapp/.Info: +267ms

非常感谢!!

编辑

 public class Jokes extends Activity {

public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.jokes);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        //dit is t textview element, gevonden door id van de XML layout jokes
        TextView myListView = (TextView)findViewById(R.id.netResult);
        new loadSomeStuff().execute(FILENAME);      
        }// onCreate

public class loadSomeStuff extends AsyncTask<String, Integer, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        //proberen met internet te connecten
        try{
            //maak nieuw client object
            HttpClient httpclient = new DefaultHttpClient();

            //post to onze url, site is voorbeeld
            HttpPost httppost = new HttpPost("http://ephemeraltech.com/demo/android_tutorial20.php");

            //voor post uit en get response
            HttpResponse response = httpclient.execute(httppost);

            //get message from response
            HttpEntity entity = response.getEntity();

            //get content van message
            InputStream webs = entity.getContent();

            //nu hebben we response, convert to string

            try
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(webs, "iso-8859-1"), 8);
                //dit is t textview element, gevonden door id van de XML layout jokes
                TextView myListView = (TextView)findViewById(R.id.netResult);
                //lees 1 lijn van text
                myListView.setText(reader.readLine());
                //sluiten
                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());
        }
 return null;
}
 }
 }

我不知道我在做什么以及一切意味着什么,这对我来说都是新的,但感谢你们所有人的帮助。

【问题讨论】:

  • 您是否检查过天气响应是否即将到来??以及如何直接将文本设置为列表视图?不解析?甚至不知道数据的类型和大小是什么???
  • 你试过调试它吗?请尝试获取来自服务器的响应....

标签: android eclipse url web bufferedreader


【解决方案1】:

首先请将以下代码添加到清单中

<uses-permission android:name="android.permission.INTERNET"/>

然后将所有网络代码放入线程或异步任务的 doinbackground 方法中。

这将解决您的问题。

您可以使用

调用当前的异步任务
new loadstuff.execute("url");

public class loadSomeStuff extends AsyncTask<String, Integer, String>{

   String result=null;

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub
        //proberen met internet te connecten
        try{
            //maak nieuw client object
            HttpClient httpclient = new DefaultHttpClient();

            //post to onze url, site is voorbeeld
            HttpPost httppost = new HttpPost("http://ephemeraltech.com/demo/android_tutorial20.php");

            //voor post uit en get response
            HttpResponse response = httpclient.execute(httppost);

            //get message from response
            HttpEntity entity = response.getEntity();

            //get content van message
            InputStream webs = entity.getContent();

            //nu hebben we response, convert to string

            try
            {
                BufferedReader reader = new BufferedReader(new InputStreamReader(webs, "iso-8859-1"), 8);

                //text view removed from here
               result=reader.readline();

                //sluiten
                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());
        }
 return null;
}

 onPostExecute(){

          //declare your text view here & assign result to your text view.
          myTextView.setText(result);

   }
 }

【讨论】:

  • 非常感谢,但我不做什么我在原始问题中编辑了我的代码首先,我有这个新的类 loadSomeStuff 执行某些东西但 FILENAME 无法解析为变量,我该怎么办放在那里?其次,我想从网站上阅读文本,我对异步任务有什么论据? (字符串,整数,字符串)是正确的?第三,现在我明白了 asynctask 返回了一些东西,我该如何返回文本?再次感谢。
猜你喜欢
  • 2021-09-30
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2015-07-07
  • 2014-09-19
  • 2016-03-11
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多