Android開発をしています。
PHPから、IDだけJSONで送って
JavaでJSONを受け取るようにしているのですが、
なかなかできません。
これまで、何度か同じ様な処理を実装しているのですが
どうしてもidだけが取れないです。何が原因なのか、調べてもわかりません。
どこを修正すれば良いでしょうか...
以下がJSONをエンコードした形です。
json
1{ 2 "number": [ 3 { 4 "id": "10" 5 } 6 ] 7}
そして、下記がJavaのAsyncTaskのコードになります。
Java
1public class Get_IdTask extends AsyncTask<String, String, String> { 2 3 private Activity activity; 4 5 public Get_IdTask(Activity act){ 6 this.activity = act; 7 } 8 9 10 @Override 11 protected void onPreExecute(){ 12 super.onPreExecute(); 13 } 14 15 @Override 16 protected String doInBackground(String...parameter){ 17 String word = parameter[0]; 18 String urls = "JSONを取って来るURL"; 19 URL url = null; 20 HttpURLConnection connection = null; 21 OutputStream out = null; 22 StringBuilder response = new StringBuilder(); 23 24 try{ 25 url = new URL(urls); 26 connection = (HttpURLConnection)url.openConnection(); 27 connection.setRequestMethod("POST"); 28 connection.setDoOutput(true); 29 connection.setDoInput(true); 30 OutputStreamWriter outwriter = new OutputStreamWriter(connection.getOutputStream()); 31 outwriter.write("id="+word); 32 33 Log.d("LOGLOG",""+word); 34 35 outwriter.flush(); 36 connection.connect(); 37 38 int status = connection.getResponseCode(); 39 if(status == HttpURLConnection.HTTP_OK){ 40 InputStream in = connection.getInputStream(); 41 String encoding = connection.getContentEncoding(); 42 if(encoding == null){ 43 encoding = "UTF-8"; 44 } 45 InputStreamReader inreader = new InputStreamReader(in,encoding); 46 BufferedReader bufreader =new BufferedReader(inreader); 47 String line = null; 48 while((line = bufreader.readLine()) != null){ 49 response.append(line); 50 } 51 bufreader.close(); 52 inreader.close(); 53 in.close(); 54 55 }else{ 56 Log.d("LOGLOG",""+status); 57 } 58 59 }catch (IOException e){ 60 e.printStackTrace(); 61 }finally { 62 if(connection != null){ 63 connection.disconnect(); 64 } 65 } 66 67 return response.toString(); 68 } 69 70 @Override 71 protected void onPostExecute(String result) { 72 73 try{ 74 JSONObject rootJSON = new JSONObject(result); 75 JSONArray spotArray = rootJSON.getJSONArray("number"); 76 JSONObject detail = spotArray.getJSONObject(0); 77 String id = detail.getString("id"); 78 79 Intent intent = new Intent(activity, SecondActivity.class); 80 intent.putExtra("id",id); 81 82 activity.startActivity(intent); 83 84 85 }catch (JSONException e){ 86 Log.d("LOGLOG","Nullです。"); 87 e.printStackTrace(); 88 } 89 } 90} 91
Activityから、任意の文字列をAsyncTaskに渡し、
AsyncTaskからその文字列をPOSTでPHPに送っています。
そして、PHPではその文字を検索して
結果として、検索したレコードのIDを取り
idを違うActivityへ渡すということをしています。
どうしても、JSONExceptionが投げられ
"Nullです。" と、logには出てしまいます。
どこがおかしいのでしょうか。
AsyncTaskでJSONを受け取る実装は何度かしてきましたが
今回ばかりは、調べてもどこが原因なのか検討がつきません。
ご教示いただけましたら、幸いです。
補足です。
コメントをいただいて、resultの中を見て見ました。
resultの中は、以下のように書かれていました。
Log
1 Array( [0] => Array ( [id] => 10 )){"number":[{"id":"10"}]}
値は取れていることを確認できたので
あとはJSONのパースで失敗しているのだと思います。
この場合、"10"だけ取得するには、どのようにパースすれば良いのでしょうか。。。
しっかり開発を初めて3ヶ月くらいなので、簡単なことしかわからず。。。
申し訳ございませんが、ご教示のほどよろしくお願いいたします。
補足②
先ほど載せたresultの中身ですが
Log
1Array( [0] => Array ( [id] => 10 )) 2
この部分がいらないようです。
下記がphpです。
php
1 $str = $_POST["id"]; 2 3 $model = new ModelTest(); 4 $a = $model->getid($str); 5 print_r($a); 6 $count = count($a); 7 8 for ($i=0; $i < $count ; $i++) { 9 $search["number"][] = array( 10 "id" => $a[$i]['id'], 11 ); 12 } 13 14 header('Content-Type: application/json'); 15 echo json_encode($search);
回答1件
あなたの回答
tips
プレビュー