かなりの調査を行った後、 を渡してからサーバー側を取得することで、 を使用している人を見つけることができませんでしたAsyncTask
。Through multiple を設定しています。HttpPost
JSONObject
JSONObject
JSONObject
HashMaps
に渡すとJSONObject
、参照AsyncTask
のように見えるものが得られJSONObject
ます。それから、PHPサーバー側で適切に解析する方法がわかりません。
JSONObject
ビルダー メソッドとAsyncTask
呼び出し元:
HashMap<Integer, HashMap<String, String>> finalHash;
HashMap<String, String> semiFinalHash;
private void completeSurvey() throws JSONException {
finalHash = new HashMap<Integer, HashMap<String, String>>();
semiFinalHash = new HashMap<String, String>();
JSONArray jArray = new JSONArray();
JSONObject joMap = new JSONObject();
for (int indexInt = 0; indexInt <= lightingMap.size(); indexInt++) {
if (lightingMap.containsKey(indexInt) && !placeholderHashMap.containsKey(indexInt)) {
int checkId = indexInt;
placeholderHashMap.put(checkId, "null");
}
}
Log.i("", "" + placeholderHashMap.toString());
for (int finalOutPut = 0; finalOutPut < lightingMap.size(); finalOutPut++) {
JSONObject jo = new JSONObject();
try {
int id = finalOutPut + 1;
jo.put("id", id);
jo.put("SurveyPhoto", placeholderHashMap.get(id));
jo.put("Lighting", lightingMap.get(id));
jo.put("Notes", signSpecNotesMap.get(id));
jo.put("AdditionalService", chkBxMap.get(id));
//jo.put("Coordinates", latLngMap.get(id));
jArray.put(jo);
} catch (Exception e) {
Log.e("", "" + e.getMessage());
}
}
joMap.put(businessName, jArray);
Log.i("JSONObject", joMap.toString());
new CompleteSurveyAsync().execute(joMap);
}
AsyncTask
クラス:
class CompleteSurveyAsync extends AsyncTask<JSONObject, Void, String> {
public ProgressDialog progressDialog = new ProgressDialog(Main.this);
protected void onPreExecute() {
progressDialog.setMessage("Submitting Data to Server...");
progressDialog.show();
progressDialog.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface diaInterface) {
CompleteSurveyAsync.this.cancel(true);
diaInterface.dismiss();
}
});
}
String inString, parameterPass;
JSONObject jobject;
@Override
protected String doInBackground(JSONObject... jObject) {
parameterPass = jObject.toString();
Log.i("doInBackground", parameterPass);
String url_select = "http://www.somewebsite.com/db/completedSurvey.php";
HttpResponse response;
try {
HttpPost httpPost = new HttpPost(url_select);
HttpClient httpClient = new DefaultHttpClient();
httpPost.setEntity(new ByteArrayEntity(jObject.toString().getBytes("UTF8")));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
response = (HttpResponse) httpClient.execute(httpPost);
HttpEntity entity = response.getEntity();
if(entity != null) {
InputStream in = response.getEntity().getContent();
inString = in.toString();
Log.i("InputStream", "" + in.toString());
}
} catch (UnsupportedEncodingException e1) {
Log.e("UnsupportedEncodingException", e1.toString());
e1.printStackTrace();
} catch (ClientProtocolException e2) {
Log.e("ClientProtocolException", e2.toString());
e2.printStackTrace();
} catch (IllegalStateException e3) {
Log.e("IllegalStateException", e3.toString());
e3.printStackTrace();
} catch (IOException e4) {
Log.e("IOException", e4.toString());
e4.printStackTrace();
}
return parameterPass;
}
protected void onPostExecute(String s) {
this.progressDialog.dismiss();
Log.i("onPostExecute", s);
Toast.makeText(Main.this, s, Toast.LENGTH_LONG).show();
}
}
これにより、次の LogCat 出力が得られます。
11-13 09:52:45.606: I/JSONObject(2601): {"SOME COMPANY":[{"Notes":"null","SurveyPhoto":"[B@427a1fa8","id":1,"Lighting":1,"AdditionalService":0},{"Notes":"null","SurveyPhoto":"null","id":2,"Lighting":0,"AdditionalService":0},{"Notes":"null","SurveyPhoto":"null","id":3,"Lighting":1,"AdditionalService":0},{"Notes":"null","SurveyPhoto":"null","id":4,"Lighting":1,"AdditionalService":0}]}
11-13 09:52:45.626: I/doInBackground(2601): [Lorg.json.JSONObject;@416ad478
11-13 09:52:45.786: I/InputStream(2601): org.apache.http.conn.EofSensorInputStream@416c51d0
11-13 09:52:45.816: I/onPostExecute(2601): [Lorg.json.JSONObject;@416ad478
を検証しJSON
、ビルドは正常に機能しますが、通過するAsyncTask
と を取得し始め[Lorg.json.JSONObject;@4158c990
ます。これはオブジェクト参照ですか? もしそうなら、どうすればこのPHPサーバー側を解析できますか?
私の現在のPHPは、ファイルへの書き込みのみに設定されています:
$json = file_get_contents('php://input');
$jsonObj = json_decode($json, true);
$jsonFile = "json.txt";
$fh = fopen($jsonFile, 'a');
fwrite($fh, $json);
fwrite($fh, "\n");
fwrite($fh, $jsonObj);
fwrite($fh, "\n");
fclose($fh);
出力 (json.txt):
[Lorg.json.JSONObject;@416ad478