有关系,android里请求网络不能在主线程里操作,必须在子线程(也就是异步),楼上说的没错, new Thread() { public void run() { // 把你的代码都写在这里 } }.start();
同志们,他报的是空指针异常,而不是network on UI thread异常,在android 4.0以下是可以在UI中进行网络操作的,但毕竟如果耗时的话会引发ANR ,楼主LOG贴的不全,没看出是你代码的哪一行报空指针,看样子InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 这句话是不可能报空指针的啊,除非你在其他地方有线程把urlConnection置空了。
同志们,他报的是空指针异常,而不是network on UI thread异常,在android 4.0以下是可以在UI中进行网络操作的,但毕竟如果耗时的话会引发ANR ,楼主LOG贴的不全,没看出是你代码的哪一行报空指针,看样子InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 这句话是不可能报空指针的啊,除非你在其他地方有线程把urlConnection置空了。public class WebActivity extends Activity{
我看网上都是这样写的。你百度下,异步加载网络,好多demo的,,,
我看网上都是这样写的。你百度下,异步加载网络,好多demo的,,,
我只是请求一个页面,并没有提交数据,和异步没关系吧。
我只想知道urlConnection.getInputStream()为什么报错
new Thread() {
public void run() {
// 把你的代码都写在这里
}
}.start();
同志们,他报的是空指针异常,而不是network on UI thread异常,在android 4.0以下是可以在UI中进行网络操作的,但毕竟如果耗时的话会引发ANR ,楼主LOG贴的不全,没看出是你代码的哪一行报空指针,看样子InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 这句话是不可能报空指针的啊,除非你在其他地方有线程把urlConnection置空了。
同志们,他报的是空指针异常,而不是network on UI thread异常,在android 4.0以下是可以在UI中进行网络操作的,但毕竟如果耗时的话会引发ANR ,楼主LOG贴的不全,没看出是你代码的哪一行报空指针,看样子InputStream in = new BufferedInputStream(urlConnection.getInputStream()); 这句话是不可能报空指针的啊,除非你在其他地方有线程把urlConnection置空了。public class WebActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wikipedia);
HttpURLConnection urlConnection = null;
try {
URL url = new URL("http://www.baidu.com/");
urlConnection = (HttpURLConnection)url.openConnection();
urlConnection.setDoInput(true);// 表示从服务器获取数据
urlConnection.setDoOutput(true);// 表示向服务器写数据
urlConnection.setConnectTimeout(3000);
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
String result = readInStream(in);
// handleResult(result);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
}
private String readInStream(InputStream in){
Scanner scanner = new Scanner(in).useDelimiter("\\A");
return scanner.hasNext() ? scanner.next() : "";
}
}没有将urlConnection置空,这是我activity全部的代码
new Thread() { @Override
public void run() {
HttpURLConnection urlConnection = null;
try {
URL url = new URL("http://www.baidu.com/");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setDoInput(true);// 表示从服务器获取数据
urlConnection.setDoOutput(true);// 表示向服务器写数据
urlConnection.setConnectTimeout(3000);
InputStream in = new BufferedInputStream(
urlConnection.getInputStream());
String result = readInStream(in);
Log.e("test", result);
// handleResult(result);
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
urlConnection.disconnect();
}
} }.start();
} private String readInStream(InputStream in) {
Scanner scanner = new Scanner(in).useDelimiter("\\A");
return scanner.hasNext() ? scanner.next() : "";
}
经过测试,这样是没有问题的
在xml文件中添加
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />