いつもお世話になっております。
早速ですが、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);
上記をインスタンス化するとエラーになります。
参考サイトもしくは解決策をご教授いただければ幸いです。
回答よろしくおねがいします!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。