1

オプションの引数が渡された場合に Httppost を送信する JSON パーサー クラスがあります。

public class JSONParser {

static InputStream is = null;
static JSONObject jObj = null;
static String json = "";

// constructor
public JSONParser() {

}

public JSONObject getJSONFromUrl(String url, Object... params) {

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

        if(params.length > 0){
            httpPost.setEntity(new UrlEncodedFormEntity((List<? extends NameValuePair>)params[0]));
        }

        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, "iso-8859-1"), 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);
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

    // return JSON String
    return jObj;

}

}

これは私の ICS と JellyBean デバイスでは機能しますが、Froyo と Gingerbread では機能しません。エラーメッセージは次のとおりです。

10-21 13:49:10.348: E/Buffer Error(471): Error converting result java.lang.NullPointerException
10-21 13:49:10.348: E/JSON Parser(471): Error parsing data org.json.JSONException: End of input at character 0 of 

誰かがこれで私を助けてくれますか? froyoとジンジャーブレッドはhttpGetのみをサポートしていますか??

4

3 に答える 3

0

asynctask に入れてみる

private class PermissionEnableAsyncTask extends AsyncTask<String, Void, Object[]>
{
    private ProgressDialog mProgressDialog = null;
    @Override
    protected void onPreExecute() 
    {
        super.onPreExecute();
        mProgressDialog = new ProgressDialog(PermissionList.this);
        mProgressDialog.setMessage(Constant.MSG_PROGRESSBAR_WAITING);
        mProgressDialog.setCancelable(false);
        mProgressDialog.setCanceledOnTouchOutside(false);
        mProgressDialog.show();
    }

    @Override
    protected Object[] doInBackground(String... params) 
    {
        try
        {
            String Url = "your URL";
                    //your logic
        return yourlogic;
        }
        catch(Exception e)
        {
            e.printStackTrace();
            return null;    
        }
    }

    @Override
    protected void onPostExecute(Object[] object)
    {
        super.onPostExecute(object);
        mProgressDialog.dismiss();
        try 
        {
                            your logic          
                    }
        catch(Exception e) 
        {
            e.printStackTrace();
        }
    }
}
于 2012-10-22T05:28:12.377 に答える
0

最初に、この json 文字列を呼び出す元のファイルを確認して、json 形式を乱す無効な文字を探します。これは、php ファイルからデータを取得するときに同じ問題が発生したときに発生していました。php ファイルが追加のエラーを送信していたため、jSONObject への解析が失敗していました。

   try {
    jObj = new JSONObject(json);
    } catch (JSONException e) {
    Log.e("JSON Parser", "Error parsing data " + e.toString());
    }

それが私がそこにエラーを得た方法です

于 2012-10-21T14:10:13.447 に答える
0

ubuntuのFroyoとジンジャーブレッドエミュレーターでテストしようとしたとき、面白いことに、うまくいきました。ただし、Windowsで実行しようとすると、まったく機能しません。したがって、これは公式に閉鎖されています:)

于 2012-10-21T22:22:03.217 に答える