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

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

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

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Q&A

解決済

1回答

421閲覧

Android Studio からサーバー側にGETで文字列を追記するとFileNotFoundExceptionになってサーバー側にリクエストできない

eisaku123

総合スコア74

Java

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

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

0グッド

0クリップ

投稿2018/02/21 14:36

編集2018/02/21 14:39

こんにちわ、いつもお世話になります。

表記の通り
Android Studio からサーバー側にGETで文字列を追記するとFileNotFoundExceptionになってサーバー側にリクエストできないくて困ってます

下記の①のところで英数字は、サーバーにリクエストできるのですが文字だとできないです。
デバックすると②のところでFileNotFoundExceptionがでて、サーバーに送れないような感じがします。

何か解決策はあるのでしょうか?

ちなみにブラウザからだと
http://192.168.3.5:8080/book123/chapter14/search?keyword=あなご
リクエストできます。

Java

1public class MainActivity extends AppCompatActivity { 2 AsyncNetworkTask task; 3 EditText edit_text; 4 @Override 5 protected void onCreate(Bundle savedInstanceState) { 6 super.onCreate(savedInstanceState); 7 setContentView(R.layout.activity_main); 8 9 task = new AsyncNetworkTask(this); 10 } 11 12 public void btn_onClick2(View view) { 13 String i = "yuusaku"; 14 String y = "あなご"; 15 16 //①//↓↓↓↓↓↓↓ここが問題 17 task.execute("http://192.168.3.5:8080/book123/chapter14/search?keyword="+y);//文字(あなご)だといけない 18 task.execute("http://192.168.3.5:8080/book123/chapter14/search?keyword="+i); //英数字はいける 19 } 20} 21 22//----------------------------------------------------------------------------------------------------------- 23 24public class AsyncNetworkTask extends AsyncTask<String, Integer, String> { 25 private TextView txtResult; 26 private ProgressBar progress; 27 28 public AsyncNetworkTask(Context context) { 29 super(); 30 MainActivity activity = (MainActivity)context; 31 txtResult = (TextView)activity.findViewById(R.id.txtResult); 32 progress = (ProgressBar)activity.findViewById(R.id.progress); 33 } 34 35 @Override 36 protected String doInBackground(String... params) { 37 publishProgress(30); 38 SystemClock.sleep(100); 39 publishProgress(30); 40 StringBuilder builder = new StringBuilder(); 41 try { 42 URL url = new URL(params[0]); 43 HttpURLConnection con = (HttpURLConnection)url.openConnection(); 44 con.setRequestMethod("GET"); 45 46 //②//ここのgetInputStream()が問題ではないか??  47 /////yが「あなご」だとFileNotFoundExceptionとなり、サーバ側に送れてない気がする 48 BufferedReader reader = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8")); 49 String line; 50 while ((line = reader.readLine()) != null){ 51 builder.append(line); 52 } 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 publishProgress(100); 57 return builder.toString(); 58 } 59 @Override 60 protected void onPreExecute() { 61 progress.setVisibility(ProgressBar.VISIBLE); 62 } 63 64 @Override 65 protected void onProgressUpdate(Integer... values) { 66 // Log.d("url", values[0].toString()); 67 progress.setProgress(values[0]); 68 } 69 70 @Override 71 protected void onPostExecute(String result) { 72 txtResult.setText(result); 73 progress.setVisibility(ProgressBar.GONE); 74 } 75 76 @Override 77 protected void onCancelled() { 78 txtResult.setText("キャンセルされました。"); 79 progress.setVisibility(ProgressBar.GONE); 80 } 81} 82 83 84 85

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

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

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

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

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

guest

回答1

0

ベストアンサー

JavaのStringに入れたマルチバイト文字列を直接連結したURLでは上手くいかない可能性がありそうです。下記のように文字コードを特定してURLエンコードした文字列を連結してみたらどうでしょうか。

Java

1String y = URLEncoder.encode("あなご", "UTF-8"); 2task.execute("http://192.168.3.5:8080/book123/chapter14/search?keyword=" + y); // URLエンコードした文字列を連結

投稿2018/02/21 22:37

keicha_hrs

総合スコア6766

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問