经过大量研究后,我无法通过传递AsyncTask
然后检索服务器端来找到使用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
答案 0 :(得分:3)
JSONObject... jObject
表示jObject
不是JSONObject
...它是varargs / array
试
if(jObject.length > 0)
{
final JSONObject realjObject = jObject[0];
//rest of code goes here and instead of jObject we are using realjObject
}
编辑: 代替:
httpPost.setEntity(new ByteArrayEntity(jObject.toString().getBytes("UTF8")));
使用(仅用于清洁代码:)):
httpPost.setEntity(new StringEntity(jObject.toString(), "UTF8"));