BufferReader Android

BufferReader Android,android,sdk,bufferedreader,urlconnection,Android,Sdk,Bufferedreader,Urlconnection,您好,我正在尝试设置一个简单的连接,通过android应用程序下载网页源代码,以便稍后将其与api结合使用。下面的代码显示没有错误,但在运行时,当运行此代码时,应用程序将退出。当我注释掉BufferReader行时,应用程序继续正常运行,因此这行代码一定有问题: BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); 下面,我从我使用它的地方得到了完整的代码片段

您好,我正在尝试设置一个简单的连接,通过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)

06-15 16:15:50.911:D/dalvikvm(925):GC\u FOR\u ALLOC freed您正在尝试加载url:

http:www.google.com

请注意缺少斜杠。它不是真实地址。

从web源获取数据时,应该使用
StringBuilder
连接字符串。每次连接字符串都会降低已建立的连接速度。以下是StringBuilder的参考:

已编辑 在执行网络操作、从数据库读写或运行服务时也是如此。就像您试图从web源获取数据一样,建议您在单独的线程中运行此类任务,而不是在主线程(也称为UI线程)上运行。如果您不使用单独的线程,您将始终面临异常和应用程序崩溃。对于您正在做的工作,最好的解决方案是使用
AsynchTask
。签出这些引用:

请参阅辅助线程部分:

查看AsynchTask提供的功能: