0

私はasyncTaskこのようなものを持っています:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
import android.util.Log;

public class OfficeJSONParser extends AsyncTask<String, String, JSONObject> {

    private ProgressDialog progressDialog;
    InputStream inputStream = null;
    String result = "";
    Context c;
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    String url;

    public OfficeJSONParser(Context c, String url) {
        this.c = c;
        this.url = url;
    }

    protected void onPreExecute() {
        progressDialog = new ProgressDialog(c);
        progressDialog.setMessage("Downloading your data...");
        progressDialog.show();
        progressDialog.setOnCancelListener(new OnCancelListener() {
            public void onCancel(DialogInterface arg0) {
                OfficeJSONParser.this.cancel(true);
            }
        });
    }

    @Override
    protected JSONObject doInBackground(String... params) {
        return getJSONFromUrl(url);
    }

    protected void onPostExecute(JSONObject jObj) {
        JSONObject json = jObj;
    }

    public JSONObject getJSONFromUrl(String url) {

        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);

            HttpResponse httpResponse = httpClient.execute(httpPost);
            HttpEntity httpEntity = httpResponse.getEntity();
            is = httpEntity.getContent();

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "UTF-8"), 8);
            StringBuilder sb = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                sb.append(line + "\n");
            }
            is.close();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json.substring(json.indexOf("{"),
                    json.lastIndexOf("}") + 1));
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }
        // return JSON String
        return jObj;

    }
}

提供された URL が有効な JSON ドキュメントであることはわかっていますが、私のパーサーは次のように返します。

{"MARGIN-LEFT":"30px","PADDING-BOTTOM":"2em","FONT-SIZE":"0.7em"} 

なんで?何が起こっている?

編集:

JSON はノルウェー語ですが、構造は簡単に理解できます。

http://data.helsenorge.no/External.svc/Services/KA02/10.75/59.91

4

2 に答える 2

1

私はあなたのコードをコンパイルして実行しましたが、主題に関する多くの情報を提供しない以外に、他の回答が反対票を投じられた理由がわかりません。あなたの HttpPost を HttpGet に変更しました。返された JSON 文字列は、実際にサイトの JSON コンテンツです。変更するだけです:

HttpPost httpPost = new HttpPost(url);

HttpGet httpGet = new HttpGet(url);

取得したJSON文字列をログに記録またはデバッグします

json = sb.toString();

そして、あなたはまさにあなたが望むものを持っているべきです. あとは、json 文字列を解析して JSON オブジェクトにするだけです。

于 2013-04-12T21:05:54.377 に答える
0

これが理由かはわかりませんが、本当にhttp投稿をしたいですか?よろしければ、サービスをお呼びいただければと思います。なぜ HttpGet を使用しないのですか?

于 2013-04-12T20:09:30.350 に答える