2 aind 0 Aind_0 于 2016.02.05 20:52 提问

HttpURLConnection测试程序崩溃

今天照《第一行代码》第10章敲出来的HttpURLConnection测试程序运行之后一直闪退,求大神指点,小白拜谢!

错误日志如下:

图片说明
图片说明

代码如下:

 package com.example.networktest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;
import android.app.ActionBar;
import android.app.AlertDialog.Builder;
import android.app.Fragment;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends Activity implements OnClickListener {
    public static final int SHOW_RESPONSE = 0;
    private TextView textView;
    private Button button;
    private Handler handler = new Handler() {
        public void handlerMessage(Message msg) {
            switch (msg.what) {
            case SHOW_RESPONSE:
                String response = (String) msg.obj;
                // 更新UI操作
                textView.setText(response);
                break;

            default:
                break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_main);
        textView = (TextView) findViewById(R.id.sendRequest);
        button = (Button) findViewById(R.id.responseText);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v.getId() == R.id.sendRequest) {
            sendRequsetWithHttpURLConnection();
        }
    }

    private void sendRequsetWithHttpURLConnection() {
        // 开启线程来发起网络请求
        new Thread(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                HttpURLConnection connection = null;
                try {
                    URL url = new URL("http://www.baidu.com");
                    connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    connection.setConnectTimeout(8000);
                    connection.setReadTimeout(8000);
                    InputStream in = connection.getInputStream();
                    // 对获取到的输入流进行解析
                    BufferedReader reader = new BufferedReader(
                            new InputStreamReader(in));
                    StringBuilder response = new StringBuilder();
                    String line ;
                    while ((line=reader.readLine()) != null) {
                        response.append(line);
                    }
                    // 发送返回结果
                    Message message = new Message();
                    message.what = SHOW_RESPONSE;
                    message.obj = response.toString();
                    handler.sendMessage(message);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } finally {
                    if (connection != null) {
                        connection.disconnect();
                    }
                }
            }
        }).start();
    }

}

2个回答

liyuanjinglyj
liyuanjinglyj   2016.02.05 23:24
已采纳

看你的日志你好像是把textview设置到button中了,就是你findviewbyid获取的是textview但是赋值给button了,

liyuanjinglyj
liyuanjinglyj 回复Aind_0: 你的网络任务获取到数据呢吗?有不有日志提示?
接近 2 年之前 回复
Aind_0
Aind_0 可是为什么点击button仍然没有响应呢?
接近 2 年之前 回复
Aind_0
Aind_0 果然群众的眼睛才是雪亮的,我把逻辑梳理了一遍又一遍,就是没往这个地方想啊~多谢前辈了!
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.02.05 21:14

ComponetInfo Activity 的定义在哪里?
使用 HTTP 功能,需要 网络相关的权限,不知道你有没有在 Mainfest.xml 中设置?

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!