Java Android Json解析不返回任何内容

Java Android Json解析不返回任何内容,java,php,android,json,parsing,Java,Php,Android,Json,Parsing,我有一个Json解析器类,如下所示: 公共类JSONParser{ static InputStream is = null; static JSONObject jObj = null; static String json = ""; public JSONParser() { } // function get json from url // by making HTTP POST or GET mehtod public JSONObject makeHttpRequest(St

我有一个Json解析器类,如下所示: 公共类JSONParser{

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

public JSONParser() {

}

// function get json from url
// by making HTTP POST or GET mehtod
public JSONObject makeHttpRequest(String url, String method,
                                  List<NameValuePair> params) {

    // Making HTTP request
    try {

        // check for request method
        if(method == "POST"){
            // request method is POST
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            httpPost.setEntity(new UrlEncodedFormEntity(params));

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

        }else if(method == "GET"){
            // request method is GET
            DefaultHttpClient httpClient = new DefaultHttpClient();
            String paramString = URLEncodedUtils.format(params, "utf-8");
            url += "" + paramString;
            HttpGet httpGet = new HttpGet(url);

            HttpResponse httpResponse = httpClient.execute(httpGet);
            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 {
        JSONArray jObj = new JSONArray(json);
        System.out.println(jObj.toString());
    } catch (JSONException e) {
        Log.e("JSON Parser", "Error parsing data " + e.toString());
    }
    // return JSON String
    return jObj;

}
我没有得到任何值(null),因此我的视图一直是空的

我收到以下错误消息:

java.lang.NullPointerException:尝试调用虚拟方法 空对象上的“java.lang.String org.json.JSONObject.toString()” 参考 在 com.example.androidhive.AllProductsActivity$LoadAllProducts$1.run(AllProductsActivity.java:150)

第150行是这样的:

Log.d("All Products: ", json.toString());
所以Android Studio告诉我

乔布

这里,在我的jsonparser中:

try {
    JSONArray jObj = new JSONArray(json);
} catch (JSONException e) {
    Log.e("JSON Parser", "Error parsing data " + e.toString());
}
从未使用过


我在这方面没有太多经验,所以我真的希望得到一些帮助,谢谢。

使用
JSONObject json=new JSONObject();
您正在创建一个空的
JSONObject

jParser.makeHttpRequest返回的
JSONObject
(url\u all\u products,“GET”,params);
从不使用

你必须这样做:

JSONObject json=jParser.makeHttpRequest(url\u所有产品,“GET”,参数);


因此,来自JParser的
JSONObject
将存储在
json
中,其中
JSONObject json=new JSONObject();
您正在创建一个空的
JSONObject

jParser.makeHttpRequest返回的
JSONObject
(url\u all\u products,“GET”,params);
从不使用

你必须这样做:

JSONObject json=jParser.makeHttpRequest(url\u所有产品,“GET”,参数);


因此,来自JParser的
JSONObject
将存储在
json

if(method==“POST”){
->您的意思是什么?(应用程序使用get方法)它可以工作,因为
字符串方法
显然持有硬编码文字
“POST”
。由于文本存储在字符串池中,所以最终得到的字符串实例与
=
确认的字符串实例完全相同。但如果要使用不在该池中的字符串(如动态创建字符串时-通过读取某些源:文件、套接字)然后将它传递给你的方法,你会看到与
==
比较会失败,这就是为什么使用
equals
比较是首选的原因。同样的方法。equals(“POST”)?
如果(method==“POST”){
->你的意思是什么?(应用程序使用get方法)它之所以有效,是因为
String方法
显然持有硬编码的文本
“POST”
。因此,由于文本存储在字符串池中,您最终得到的字符串实例与
=
确认的字符串实例完全相同。但如果您要使用不在该池中的字符串(比如当您动态创建它时——通过读取一些源代码:文件、套接字)并将其传递给您的方法,您会看到与
=
进行比较会失败,这就是为什么首选使用
equals
进行比较的原因?首先感谢您的回答,我按照您告诉我的方式更改了代码,并收到以下错误消息:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String org.json.JSONObject.toString()”,因为您的代码看起来像
try{JSONArray jObj=new JSONArray(json);       }return jObj;
局部变量
jObj
仅在try块中可见,您将返回从未初始化的类变量
jObj
。您必须在try块中初始化类
jObj
。根据您使用的json库,您必须从json中获取
JSONObject
stringHmm好的,你能给我看一段你是什么意思吗?如果你有时间,我愿意和你聊天:)首先感谢您的回答,我按照您告诉我的方式更改了代码,并收到以下错误消息:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String org.json.JSONObject.toString()”,因为您的代码看起来像
try{JSONArray jObj=new JSONArray(json);       }return jObj;
局部变量
jObj
仅在try块中可见,您将返回从未初始化的类变量
jObj
。您必须在try块中初始化类
jObj
。根据您使用的json库,您必须从json中获取
JSONObject
stringHmm好的,你能给我看一段你是什么意思吗?如果你有时间,我愿意和你聊天:)
Log.d("All Products: ", json.toString());
try {
    JSONArray jObj = new JSONArray(json);
} catch (JSONException e) {
    Log.e("JSON Parser", "Error parsing data " + e.toString());
}