JSON 尽管在 AsyncTask 中定义之前对象为 null class?
JSON Object is null although defined before inside a AsyncTask class?
我试图通过收集 JSON 格式的信息来连接到 MySQL 数据库。我的代码收到这些信息。我创建了一个扩展 AsyncTask
的 class,在我的 onPostExecute
class 中,我想将完整的 JSONArray
保存到另一个 JSONArray
AsyncTask
class。这样做我没有收到错误消息,但是一旦我想使用这个对象,我的代码就会崩溃,我得到一个 java.lang.NullPointerException
并且我的新 JSON 数组为空。
有人可以帮助我吗?
class task extends AsyncTask<String, String, Void>
{
InputStream is = null ;
protected Void doInBackground(String... params) {
String url_select = "http://pois.lima-city.de/test1.php";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
//read content
is = httpEntity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
//Toast.makeText(MainActivity.this, "Please Try Again", Toast.LENGTH_LONG).show();
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while((line=br.readLine())!=null)
{
sb.append(line+"\n");
}
is.close();
result=sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error converting result "+e.toString());
}
return null;
}
protected void onPostExecute(Void v) {
try {
LatLng coordinates;
String between = "";
JSONArray JarrayP = new JSONArray(result);
myJSONArray = JarrayP;
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
PS: 在另一个class里面。
如果您仅将它用于创建 json 数组,我看不出使用该 result
字符串有什么意义。尝试从 doInBackground
return sb.toString()
(而不是 null)。为此,您需要修改异步任务。您的第三个通用变量应该是 String,并且您需要在 postExecute
header 中设置一个 String 参数。然后使用该字符串创建 json 数组。
您目前正在 doInBackground(String...)
中返回 Void
。这就是您在 onPostExecute
中得到 null 的原因。将您的 class 更改为:
public class YourTask extends AsyncTask<String,Void,String>{
....
然后在doInBackground()
:
....
return result;
我试图通过收集 JSON 格式的信息来连接到 MySQL 数据库。我的代码收到这些信息。我创建了一个扩展 AsyncTask
的 class,在我的 onPostExecute
class 中,我想将完整的 JSONArray
保存到另一个 JSONArray
AsyncTask
class。这样做我没有收到错误消息,但是一旦我想使用这个对象,我的代码就会崩溃,我得到一个 java.lang.NullPointerException
并且我的新 JSON 数组为空。
有人可以帮助我吗?
class task extends AsyncTask<String, String, Void>
{
InputStream is = null ;
protected Void doInBackground(String... params) {
String url_select = "http://pois.lima-city.de/test1.php";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url_select);
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
try {
httpPost.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
//read content
is = httpEntity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection "+e.toString());
//Toast.makeText(MainActivity.this, "Please Try Again", Toast.LENGTH_LONG).show();
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
String line = "";
while((line=br.readLine())!=null)
{
sb.append(line+"\n");
}
is.close();
result=sb.toString();
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error converting result "+e.toString());
}
return null;
}
protected void onPostExecute(Void v) {
try {
LatLng coordinates;
String between = "";
JSONArray JarrayP = new JSONArray(result);
myJSONArray = JarrayP;
} catch (Exception e) {
// TODO: handle exception
Log.e("log_tag", "Error parsing data "+e.toString());
}
}
PS: 在另一个class里面。
如果您仅将它用于创建 json 数组,我看不出使用该 result
字符串有什么意义。尝试从 doInBackground
return sb.toString()
(而不是 null)。为此,您需要修改异步任务。您的第三个通用变量应该是 String,并且您需要在 postExecute
header 中设置一个 String 参数。然后使用该字符串创建 json 数组。
您目前正在 doInBackground(String...)
中返回 Void
。这就是您在 onPostExecute
中得到 null 的原因。将您的 class 更改为:
public class YourTask extends AsyncTask<String,Void,String>{
....
然后在doInBackground()
:
....
return result;