Java Android Json解析不返回任何内容
我有一个Json解析器类,如下所示: 公共类JSONParser{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
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
将存储在jsonif(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());
}