JSON 尽管在 AsyncTask 中定义之前对象为 null class?

JSON Object is null although defined before inside a AsyncTask class?

我试图通过收集 JSON 格式的信息来连接到 MySQL 数据库。我的代码收到这些信息。我创建了一个扩展 AsyncTask 的 class,在我的 onPostExecute class 中,我想将完整的 JSONArray 保存到另一个 JSONArray AsyncTaskclass。这样做我没有收到错误消息,但是一旦我想使用这个对象,我的代码就会崩溃,我得到一个 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;