Android应用程序崩溃,但代码显示没有错误

时间:2017-03-07 13:42:34

标签: android

好的,所以我正在尝试创建一个能够从Web服务器检索数据的应用程序,然后在textView上显示它,并在数据从Web服务器更改时不断更新它。而经过多轮尝试后我到目前为止所得到的是如图所示

public class HttpTest extends AppCompatActivity {

TextView text = (TextView) this.findViewById(R.id.textView3);

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_http_test);

    HttpURLConnection urlConnection = null;

    try {
        URL url = new URL("http://IPGOESHERE/");

        HttpURLConnection urLConnection = (HttpURLConnection) url.openConnection();
        InputStream in = urLConnection.getInputStream();
        BufferedReader data = new BufferedReader(new InputStreamReader(in));

        StringBuilder total = new StringBuilder();
        String line;
        while ((line = data.readLine()) != null) {
            total.append(line).append('\n');
        }
        String result = total.toString();
        text.setText(result);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
    finally {
        if (urlConnection != null) {
            urlConnection.disconnect();
        }
    }
}

我不认为我写的内容允许不断更新,但我至少希望能够在textView上显示某种数据,并确保它不会先崩溃。所以,如果有人能够指出我做错了什么,那将非常感激。

2 个答案:

答案 0 :(得分:2)

应用程序崩溃,因为您在主线程上发出HTTP请求。请改用AsyncTask

答案 1 :(得分:1)

你需要在不同的线程上进行这种工作。尝试使用AsyncTask。 你创建一个扩展AsyncTask的类,而不是在doInBackground方法中创建url连接(在工作线程上调用的方法)。然后,您可以在ui线程上调用的onPostExecute方法中更新textview。祝你好运:)