无法从网址获取数据并将其显示在Textview

时间:2016-02-15 18:51:16

标签: android

我正在尝试学习从URL获取数据并将其显示在textview中。 代码不会显示任何错误,但在执行时会显示空白屏幕。

我无法理解为什么它没有进入while循环。

这是代码..

 MainActivity.java


package com.example.asad.read;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class MainActivity extends AppCompatActivity {
TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      Log.d("asd","calling call");
        call();

    }

    public void call() {
        int count = 0;
        StringBuffer sb = null;
    Log.d("asd","above try");
        try {
            URL url = new URL("http://www.oracle.com/");
            BufferedReader bf = new BufferedReader(new InputStreamReader(url.openStream()));

//            URLConnection tc = url.openConnection();
//            BufferedReader bf = new BufferedReader(new InputStreamReader(
//                    tc.getInputStream()));

            String line;
            Log.d("asd","inside try");
            while ((line = bf.readLine()) != null) {
                if (count == 2)
                    break;
                Log.d("asd","inside while");
                sb.append(line);
                sb.append("\n");
                count++;
            }
            bf.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        tv=(TextView)findViewById(R.id.textview);
        tv.setText(sb.toString());


    }

}

3 个答案:

答案 0 :(得分:1)

在Android中,不鼓励在UI线程上执行网络操作。 See this link

在您的示例中,您从onCreate调用openStream,它在UI线程中调用。请尝试创建异步任务,看看它是否有帮助。

答案 1 :(得分:1)

您可能需要在后台执行URL.openStream并在流中读取内容,而不是在UI线程中。

查看this了解详情。

答案 2 :(得分:1)

首先您正在做一些非常错误的事情 ... 使用UI /主要线程进行网络调用。

然后你使用StringBuffer sb而没有实例化它。

最后但并非最不重要的是,您没有捕获网址例外 ...

在发布编译错误之前,你应该真正查看控制台...