いつもお世話になります。
下図のように3行追加するとBufferedReader readerに読み込むことができなくなくなります。
disconnect()にしてもうまくいかないです。
何が問題あるのでしょう?
java
1//①クライント側 アンドロイドアプリ 2@Override 3 protected Result doInBackground(Void... voids) { 4 5 Result result = new Result(); 6 7 8 9 byte[] data; 10 result.bitmap = null; 11 result.text=null; 12 13 InputStream inputStream = null; 14 15 StringBuilder builder = new StringBuilder(); 16 try { 17 URL url = new URL("http://192.168.3.5:8080/book123/chapter14/search"); 18 HttpURLConnection con = (HttpURLConnection)url.openConnection(); 19 20 //↓↓↓↓↓↓↓↓↓ここ3行追加すると BufferedReader readerに読み込めない 21 con.connect(); 22 inputStream = con.getInputStream(); 23 result.bitmap = BitmapFactory.decodeStream(inputStream); 24 //↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 25 26 //↓↓↓↓↓↓読み込めれない 27 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); 28 String line; 29 while ((line = reader.readLine()) != null){ 30 builder.append(line); 31 } 32 33 result.text = builder.toString(); 34 35 }catch (IOException exception){ 36 37 } 38 return result; 39 } 40 41 @Override 42 protected void onPostExecute(Result result) { 43 44 imageview.setImageBitmap(result.bitmap); 45 textView.setText(result.text); 46 47 } 48 49}
java
1//②サーバー側 2public class Hello extends HttpServlet{ 3 4 @Override 5 public void doGet( 6 HttpServletRequest request, 7 HttpServletResponse response 8 ) throws ServletException, IOException { 9 10 try { 11 response.setContentType("application/octet-stream ;charset=UTF-8"); 12 response.setHeader("Content-Disposition" ,"attachment"); 13 14 OutputStream out = response.getOutputStream();//画像側のストリーム<===エラー:getOutputStream()はこのレスポンスに対して既に呼び出されています 15 16 //////テキスト////////start///////////////////////////////// 17 PrintWriter out2=response.getWriter();//テキスト側のストリーム 18 out2.println("こんにちは777777"); 19 //////テキスト////////end///////////////////////////////// 20 21 22 //////画像側////////start///////////////////////////////// 23 FileInputStream input =new FileInputStream("/Applications/Eclipse_4.7.2.app/Contents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/book777/WEB-INF/classes/chapter3/1.jpg"); 24 25 int i = input.read(); 26 while(i !=-1) { 27 char c = (char)i; 28 out.write(c); //ここでバイナリーデータを流している 29 i = input.read(); 30 } 31 input.close(); 32 out.close(); 33 34 //////画像側////////end///////////////////////////////// 35 36 }catch(Exception e) { 37 System.out.println("意味不明のエラーです"); 38 System.out.println(e); 39 }catch (Throwable e) { 40 System.out.println("byte[] data = IOUtils.toByteArray(input);でエラーです"); 41 } 42 43 //out.close(); 44 } 45 46}
例外ないんでしらんが BitmapFactory.decodeStream がクローズしてんじゃね(どのパッケージのか、独自実装かもらんし)
あと InputStream 内でポインタをもどしてるのかしら(HTTPconnectionのなら戻せないはずだが)
BitmapFactory.decodeStream のみをコメントアウトする読み込めれますね。ただしこれも画像の処理として生かしたいです。
よくわからないけど、このURLのものって、画像とテキストがくっついているということ?
画像はくっついてないです。しかしサーバー側からバイナリーの画像データが送られきます。
いやいや、だってこのコードを見ると、最初に画像を受信して、そのまま同じストリームでテキストを受信してるでしょ?ということは、画像とテキストがくっついた1つのファイルを受信するということになるでしょ?
くっついていない状態です。サーバー側を追記しました。こんな感じです。(エラーは出るけど)
HTMLと同時に画像を送る方法は <img src='data:image/png;base64,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'> のような方式しかないですよ
このやり方はngsvxさんの1つめの方法でしょうか? base64 と記載されているため
base64 といってるとこのですね。
ちなみに chunk は データを返す方式じゃなくレスポンスを分割しますよ(マルチパートレスポンス)
可変長(固定長)データ形式は すべてバイナリで返却してます。(何らかのふた手間が必要)
回答1件
あなたの回答
tips
プレビュー