Java 为什么bufferreader在readLine()上返回null
我正在从Java 为什么bufferreader在readLine()上返回null,java,android,Java,Android,我正在从InputStreamReader创建一个BufferReader,它从Web服务加载响应,如下所示: HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection(); try { InputStream in = c.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(in));
InputStreamReader
创建一个BufferReader
,它从Web服务加载响应,如下所示:
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
try {
InputStream in = c.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
// returns null
String line = reader.readLine();
// correctly instantiates Article object
Article article = new Gson().fromJson(reader, Article.class);
然而,出于某种原因,
reader.readLine()
返回null
,尽管数据成功地来自服务器-我知道这一点,因为Article对象是从返回的JSON正确实例化的。返回null
的原因是什么?Hm,这很奇怪。。。当我这样做时,它对我来说非常好:
File file = new File("plugin.yml");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
我知道,你说过你已经用System.out.println(stuff)测试了所有东西,但我仍然会问一些最基本的问题,也许问题就隐藏在那里:
它甚至输入了方法吗?
文件拼写是否正确(也是从您将日志添加到日志的位置)?
如果你用扫描仪读取文件,它能工作吗
Scanner scan = new Scanner(file);
String line;
while(scan.hasNextLine()) {
line = scan.nextLine();
//...
}
scan.close();
这些可能都是愚蠢的问题,但可能会有所帮助。至于现在,我看不出您的代码中有任何问题。我假设您没有将连接输出设置为true。 此外,我会这样做:
try {
URL url = new URL("http://im-an-url.com");
HttpURLConnection c = (HttpURLConnection) url.openConnection();
c.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(c.getOutputStream());
//do whatever you like here with the StreamWriter
wr.close()
}
如果使用readLine方法,请确保网络流具有结束标记\r\n,或者可以使用BufferOutputStream,因为它到达了流的结尾。但是如果它是第一条
readLine
语句,这怎么可能呢?这是否意味着没有任何东西来自服务器?是的,这是一种可能性。但接下来这个Article-Article=new-Gson().fromJson(reader,Article.class)
不应该正确实例化文章
对象,对吗?您是如何定义Url的?谢谢,但您是从文件中读取的,我是从webservice@Maximus确切地这表明服务器的响应有问题。您可以尝试使用扫描仪并实现您的逻辑。这对我来说是个好办法。试试看。谢谢,c.connect();如果(c.getResponseCode()==200){Log.d(“测试”,“已建立”);
输出已建立
。您能否澄清这一点?如果您使用readLine方法,请确保网络流有结束标记\r\n,或者您可以使用BufferOutputStream?
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
try {
c.connect();
if (c.getResponseCode == 200) {
InputStream in = c.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
// returns null
String line = reader.readLine();
// correctly instantiates Article object
Article article = new Gson().fromJson(reader, Article.class);
}