我正在尝试学习从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());
}
}
答案 0 :(得分:1)
在Android中,不鼓励在UI线程上执行网络操作。 See this link
在您的示例中,您从onCreate调用openStream,它在UI线程中调用。请尝试创建异步任务,看看它是否有帮助。
答案 1 :(得分:1)
您可能需要在后台执行URL.openStream并在流中读取内容,而不是在UI线程中。
查看this了解详情。
答案 2 :(得分:1)
首先您正在做一些非常错误的事情 ... 使用UI /主要线程进行网络调用。
然后你使用StringBuffer sb
而没有实例化它。
最后但并非最不重要的是,您没有捕获网址例外 ...
在发布编译错误之前,你应该真正查看控制台...