BufferReader Android

时间:2012-06-15 15:09:13

标签: android sdk bufferedreader urlconnection

您好我正在尝试设置一个简单的连接,通过Android应用程序下载网页源代码,以便我以后可以将它与我的api一起使用。我的代码显示没有错误,但在运行时,应用程序在运行此代码时退出。当我注释掉BufferReader行时,应用程序正常继续,所以问题必须是这行代码:

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));

而且我已经从我正在使用它的地方获得了完整的代码片段。

        currentCustomer.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            try {
                URL url = null;
                url = new URL("http:www.google.com");
                URLConnection conn = url.openConnection();
                BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                String line = "";
                while((line = reader.readLine()) != null) {
                    tv.append(line);
                }
            } catch(Exception e) {

            }

        }
    }); 

任何帮助将不胜感激:)

这是堆栈跟踪:

06-15 16:15:50.911: D/dalvikvm(925): GC_FOR_ALLOC freed <1K, 4% free 7249K/7495K, paused 59ms
06-15 16:15:51.049: D/dalvikvm(925): GC_CONCURRENT freed <1K, 4% free 7249K/7495K, paused 5ms+4ms
06-15 16:15:51.159: V/TLINE(925): new: android.text.TextLine@40633f50
06-15 16:15:51.489: V/TLINE(925): new: android.text.TextLine@4063be20
06-15 16:15:55.019: W/System.err(925): java.lang.NullPointerException
06-15 16:15:55.039: W/System.err(925):  at      org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.hashCode(HttpConnection.java:296)
06-15 16:15:55.039: W/System.err(925):  at java.util.HashMap.get(HashMap.java:302)
06-15 16:15:55.039: W/System.err(925):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:73)
06-15 16:15:55.039: W/System.err(925):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292)
06-15 16:15:55.049: W/System.err(925):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274)
06-15 16:15:55.049: W/System.err(925):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.retrieveResponse(HttpURLConnectionImpl.java:1038)
06-15 16:15:55.049: W/System.err(925):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:523)
06-15 16:15:55.049: W/System.err(925):  at com.kylemcbride.SqueakyClean.SqueakyCleanActivity$1.onClick(SqueakyCleanActivity.java:48)
06-15 16:15:55.049: W/System.err(925):  at android.view.View.performClick(View.java:3100)
06-15 16:15:55.049: W/System.err(925):  at android.view.View$PerformClick.run(View.java:11644)
06-15 16:15:55.059: W/System.err(925):  at android.os.Handler.handleCallback(Handler.java:587)
06-15 16:15:55.059: W/System.err(925):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-15 16:15:55.069: W/System.err(925):  at android.os.Looper.loop(Looper.java:126)
06-15 16:15:55.069: W/System.err(925):  at android.app.ActivityThread.main(ActivityThread.java:3997)
06-15 16:15:55.069: W/System.err(925):  at java.lang.reflect.Method.invokeNative(Native Method)
06-15 16:15:55.069: W/System.err(925):  at java.lang.reflect.Method.invoke(Method.java:491)
06-15 16:15:55.080: W/System.err(925):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-15 16:15:55.080: W/System.err(925):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-15 16:15:55.080: W/System.err(925):  at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:1)

您正在尝试加载网址:

http:www.google.com

注意缺少斜线。这不是一个真实的地址。

答案 1 :(得分:1)

在从Web源获取数据时,您应该使用StringBuilder来连接字符串。每次连接字符串都会降低建立的连接速度。以下是StringBuilder的参考:http://developer.android.com/reference/java/lang/StringBuilder.html

<强> EDITED 此外,在执行网络操作,从数据库读取和写入或运行服务时。就像你试图从Web源获取数据一样,它建议在一个单独的线程中运行这些类型的任务,而不是在主线程(也就是UI线程)上运行。当您不使用单独的线程时,您将始终面临异常和应用程序崩溃。对于您正在进行的工作的最佳解决方案,您应该使用AsynchTask。查看这些参考文献:

请参阅工作线程部分:
http://developer.android.com/guide/components/processes-and-threads.html
了解AsynchTask提供的内容:
http://developer.android.com/reference/android/os/AsyncTask.html