0

かなりの調査を行った後、 を渡してからサーバー側を取得することで、 を使用している人を見つけることができませんでしたAsyncTask。Through multiple を設定しています。HttpPostJSONObjectJSONObjectJSONObjectHashMaps

に渡すと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
4

1 に答える 1

3

JSONObject... jObjectjObjectそうではないことを意味し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")));

use(クリーンコードのためだけに:)):

httpPost.setEntity(new StringEntity(jObject.toString(), "UTF8"));
于 2012-11-13T15:12:01.830 に答える