0

经过大量研究后,我无法通过传入然后检索服务器端来找到使用AsyncTaskto HttpPosta的人。我正在填充一个通过多个。JSONObjectJSONObjectJSONObjectHashMaps

当我传递JSONObjectAsyncTask我时,我得到了一个看起来像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
4

1 回答 1

3

JSONObject... jObject意味着这jObject不是JSONObject......它是一个可变参数/数组

尝试

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"));
于 2012-11-13T15:12:01.830 回答