質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Q&A

解決済

2回答

4577閲覧

Androidでサーバー上のテキストファイルを読み込みたい

red-pain33

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

0グッド

0クリップ

投稿2017/06/09 08:46

###Androidでサーバー上のテキストファイルを読み込みたい

表題の通り、サーバー上のテキストファイルを読み込み、
それをAndroidに表示させたいと考えています。

ログから、テキストファイルを読み込むことが出来ていることは
確認できました。

しかし、アンドロイドの画面には
no data!の文字が表示されている状態です。

どこが悪いのか教えてください。
よろしくお願いします。

###発生している問題・エラーメッセージ

06-09 02:08:34.300 2494-2494/? E/libprocessgroup: failed to make and chown /acct/uid_10060: Read-only file system 06-09 02:08:34.300 2494-2494/? W/Zygote: createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT? 06-09 02:08:34.301 2494-2494/? I/art: Not late-enabling -Xcheck:jni (already on) 06-09 02:08:34.326 2494-2502/? E/art: Failed sending reply to debugger: Broken pipe 06-09 02:08:34.326 2494-2502/? I/art: Debugger is no longer active 06-09 02:08:34.466 2494-2494/? I/InstantRun: starting instant run server: is main process 06-09 02:08:34.602 2494-2494/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 06-09 02:08:34.864 2494-2511/? I/System.out: 1 06-09 02:08:34.899 2494-2511/? I/System.out: 2 06-09 02:08:34.937 2494-2511/? I/System.out: 3 06-09 02:08:34.937 2494-2511/? I/System.out: hello hello world world ←sample.txtに書き込まれているデータです。 06-09 02:08:35.500 2494-2494/com.example.blue.getmydata W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView 06-09 02:08:35.524 2494-2494/com.example.blue.getmydata D/gralloc_ranchu: Emulator without host-side GPU emulation detected.

###該当のソースコード

public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.tv_output); new GetMyData(textView).execute(); } }
public class GetMyData extends AsyncTask<Void, Void, String> { TextView textView; public GetMyData(TextView textView){ super(); this.textView = textView; } @Override protected String doInBackground(Void ... v){ String line = ""; try{ System.out.println("1"); URL url = new URL("サーバーのURL/sample.txt"); HttpURLConnection http = (HttpURLConnection)url.openConnection(); http.setRequestMethod("GET"); http.connect(); System.out.println("2"); InputStreamReader in = new InputStreamReader(http.getInputStream(), "EUC-JP"); BufferedReader br = new BufferedReader(in); System.out.println("3"); while((line = br.readLine()) != null){ System.out.println(line); } br.close(); in.close(); http.disconnect(); }catch(Exception e){ System.out.println(e); } return line; } protected void onPostExecute(String data){ super.onPostExecute(data); if(data != null){ textView.setText(data); }else{ textView.setText("no data!"); } } }

###補足情報(言語/FW/ツール等のバージョンなど)
Android Studio 2.3.2
Emulator Android 5.0.2 API 21

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

下記の箇所でnullになるまでループを続けるため、最終的にlineはnullになります。

Java

1while((line = br.readLine()) != null)

lineとは別にStringBuilder等で返却する文字列を作成しましょう。

投稿2017/06/09 09:12

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red-pain33

2017/06/09 10:08

回答ありがとうございます。 こんなにも早く回答いただけて、とても嬉しかったです。
guest

0

ベストアンサー

doInBackgroundで戻り値として返しているlineは、
while((line = br.readLine()) != null)によって、
1行分の文字列代入(上書き)を繰り返された末、
文の終端に到達してnullが代入されて、while文を抜けるため、
returnの時点でnullが設定されています。
onPostExecuteのdataには、doInBackgroundの戻り値が設定されるため、
元のコードでは文章の内容にかかわらずnullが設定されてしまいます。

動作は確認していませんが、取り急ぎ修正案を提示いたします。

java

1public class GetMyData extends AsyncTask<Void, Void, String> { 2 3 TextView textView; 4 5 public GetMyData(TextView textView){ 6 super(); 7 this.textView = textView; 8 } 9 10 @Override 11 protected String doInBackground(Void ... v){ 12 13 String line = ""; 14 StringBuilder sb = new StringBuilder();//追加 15 try{ 16 System.out.println("1"); 17 18 URL url = new URL("サーバーのURL/sample.txt"); 19 HttpURLConnection http = (HttpURLConnection)url.openConnection(); 20 http.setRequestMethod("GET"); 21 http.connect(); 22 23 System.out.println("2"); 24 25 InputStreamReader in = new InputStreamReader(http.getInputStream(), "EUC-JP"); 26 BufferedReader br = new BufferedReader(in); 27 28 System.out.println("3"); 29 30 while((line = br.readLine()) != null){ 31 System.out.println(line); 32 if(sb.length() > 0) sb.append('\n');//追加 33 sb.append(line);//追加 34 } 35 36 br.close(); 37 in.close(); 38 http.disconnect(); 39 40 }catch(Exception e){ 41 System.out.println(e); 42 } 43 return sb.toString();//変更 44 } 45 46 protected void onPostExecute(String data){ 47 super.onPostExecute(data); 48 if(data != null){ 49 textView.setText(data); 50 }else{ 51 textView.setText("no data!"); 52 } 53 } 54}

投稿2017/06/09 09:08

編集2017/06/09 09:15
monagano

総合スコア246

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

red-pain33

2017/06/09 10:11

回答ありがとうございます。 すごく丁寧に説明していただけて 実際に動くようになりました。 ベストアンサーとさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問