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

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

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

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

Android

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

Android Studio

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

Q&A

解決済

1回答

703閲覧

Androidstudio AsyncTaskを使用してのJsonデータ受け取り

ludolf

総合スコア39

Java

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

Android

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

Android Studio

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

0グッド

0クリップ

投稿2019/09/30 10:06

いつもお世話になっております。

早速ですが、AsyncTaskを使用してサーバーからJSONデータを受け取るプログラムを作成しています。
やりたいこととしては非同期でサーバーからJSONデータを受け取り、ローカルファイルに保存するというプログラムを作成したいです。
自分が躓いている問題点は、取得になります。

下記がphpとAsyncTaskプログラムのソースになります。

PHP

1 ・・・サーバーからemailとPasswordを取得しudataに入れ込んでいる処理 2 3if($_GET['mode'] == 'app' && !empty($_SESSION['user']['email']) && !empty($_SESSION['user']['password'])) { 4 5 $json = array("email"=>$udata['email'],"password"=>$udata['password']); 6 header("Content-Type: text/javascript; charset=utf-8"); 7 echo json_encode($json); 8}else{ 9 $json = array("hogehoge"); 10 header("Content-Type: text/javascript; charset=utf-8"); 11 echo json_encode($json); 12}

AsyncTask

1import android.os.AsyncTask; 2import android.util.Log; 3import android.webkit.CookieManager; 4 5import org.json.JSONArray; 6import org.json.JSONException; 7import org.json.JSONObject; 8 9import java.io.BufferedReader; 10import java.io.ByteArrayOutputStream; 11import java.io.IOException; 12import java.io.InputStream; 13import java.io.InputStreamReader; 14import java.io.UnsupportedEncodingException; 15import java.net.CookieHandler; 16import java.net.HttpURLConnection; 17import java.net.MalformedURLException; 18import java.net.URL; 19 20public class AsyncJsonLoader extends AsyncTask<Void, Void, Void> { 21 22 //自分が設定した色々なものが入っている 23 private MyClass myClass; 24 25 CookieManager cookieManager = CookieManager.getInstance(); 26 27 @Override 28 protected Void doInBackground(Void... params) { 29 try { 30 getGET(); 31 } catch (IOException e) { 32 e.printStackTrace(); 33 } 34 return null; 35 } 36 37 public String getGET() throws IOException { 38 final int CONNECTION_TIMEOUT = 30 * 1000; 39 final int READ_TIMEOUT = 30 * 1000; 40 41 42 URL url = new URL("https://sample.php?mode=app"); 43 HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 44 45 conn.setConnectTimeout(CONNECTION_TIMEOUT); 46 conn.setReadTimeout(READ_TIMEOUT); 47 conn.setRequestMethod("GET"); 48 conn.connect(); 49 int statusCode = conn.getResponseCode(); 50 if(statusCode == HttpURLConnection.HTTP_OK){ 51 52 String result = null; 53 final InputStream in = conn.getInputStream(); 54 String encoding = conn.getContentEncoding(); 55 if(null == encoding){ 56 encoding = "UTF-8"; 57 } 58 final InputStreamReader inReader = new InputStreamReader(in, encoding); 59 final BufferedReader bufferedReader = new BufferedReader(inReader); 60 String line = null; 61 while((line = bufferedReader.readLine()) != null) { 62 //ここで表示した際NULLになっていました。 63 //下記表示 D/line: {"email":null,"password":null} 64 Log.d("line","" + line + ""); 65 66 result = line; 67 } 68 bufferedReader.close(); 69 inReader.close(); 70 in.close(); 71 Log.d("","リターンOKです"); 72 return result.toString(); 73 } 74 Log.d("","リターンはNULL"); 75 return null; 76 } 77 78 79}

上記を実行すると「hogehoge」を取得します。

「自分の考え」
php側で$udataにはしっかり値が入っているのを確認が取れているのでopenConnection()したときに新しいWebview?になっていてセッションが共有出来ていないのではと睨んでいます。
共有がそもそもできていないのでPHP側のif文でelseになっているかと、、
公式の「HttpURLConnection」にCookieの共有?について書いてあるみたいなのですが、今は非推奨みたいで実際に
CookieManager cookieManager = new CookieManager();
CookieHandler.setDefault(cookieManager);
上記をインスタンス化するとエラーになります。

参考サイトもしくは解決策をご教授いただければ幸いです。
回答よろしくおねがいします!

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

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

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

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

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

guest

回答1

0

自己解決

この質問をみてご回答しようと思っていた方、大変申し訳ございません。
参考サイトがあり、参考にしたらできました、、
ご協力しようとしてくださった方々いつもありがとうございます。

解決策としては自分が睨んでいた通りsessionが新規で作られていたため、下記の参考サイトのようにしたら一発で治りました。

参考サイト:http://gsbina.com/?p=1405

ご参考くださいませ。

投稿2019/10/01 06:05

ludolf

総合スコア39

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問