MHJ:
私は、JSONの体を送信URLからの応答を読みしようとしています。しかし、私のコードは、完全な応答を読むことができていません。そこに私のコードに問題があるが、私はそれを取得しておりません。
val url: URL = new URL("https://jsonplaceholder.typicode.com/todos/1")
val httpsConnection: HttpsURLConnection = url.openConnection().asInstanceOf[HttpsURLConnection]
httpsConnection.setRequestMethod("GET")
httpsConnection.setRequestProperty("Accept", "application/json")
httpsConnection.setRequestProperty("Accept-Language", "en_US")
val streamReader: InputStreamReader = new InputStreamReader(httpsConnection.getInputStream)
val bufferedReader = new BufferedReader(streamReader)
val stringBuffer: StringBuffer =new StringBuffer()
while(bufferedReader.readLine() != null){
stringBuffer.append(bufferedReader.readLine())
}
println(stringBuffer.toString)
この上記のコードは私の実際の結果を与えていません。しかし、私は通常のJavaのスタイルと使用Scalaのソースを避ける場合:
Source.fromInputStream(httpsConnection.getInputStream,"UTF8").getLines().foreach(println)
これは実際のJSONを与えます。
コードの私の最初のセクションの問題は何ですか?
クシシュトフ・Atłasik:
この場所で:
while(bufferedReader.readLine() != null){
stringBuffer.append(bufferedReader.readLine())
}
あなたは呼んでいるreadLine
、その後に追加し、それがnullでないかどうかを確認するために二回最初stringBuffer
。あなたは2行ごとを失っているように、しかし実際には、2番目の呼び出しは、別の行を取得します。
Javaでバッファされたストリームを読み込むための通常の方法は次のとおりです。
String line;
while ((line = r.readLine()) != null) {
// do your stuff...
}
しかし、Scalaのリターンの割り当ては、Unit
それが動作しませんので。
そのため、おそらく使用してStream.continually
行く方法でしょうか?
Stream
.continually(bufferedReader.readLine())
.takeWhile(_ != null)
.foreach(stringBuffer.append)