Java 即使在对Http请求使用AsyncTask后也出现空指针异常

Java 即使在对Http请求使用AsyncTask后也出现空指针异常,java,android,android-asynctask,Java,Android,Android Asynctask,从前面的问题中,我了解到必须使用AsyncTask从服务器获取数据。我已经这样做了,但在我的例子中,当试图在另一个类Process_Auto的方法中填充AlertDialog以设置SingleChoiceItems时,仍然出现空指针异常。他们被困在这里,我做错了什么 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.i

从前面的问题中,我了解到必须使用AsyncTask从服务器获取数据。我已经这样做了,但在我的例子中,当试图在另一个类Process_Auto的方法中填充AlertDialog以设置SingleChoiceItems时,仍然出现空指针异常。他们被困在这里,我做错了什么

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.StatusLine;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.json.JSONArray;
    import org.json.JSONException;
    import android.util.Log;

    //My JSONParser Class

    public class JSONParser {

    static InputStream is = null;

    static JSONArray jarray = null;

    static String json = "";

    //Method Returns JSON

    public JSONArray getJSONFromUrl(String url) {               

            StringBuilder builder = new StringBuilder();

            HttpClient client = new DefaultHttpClient();

            HttpPost httppost = new HttpPost(url);
         try {
              HttpResponse response = client.execute(httppost);

              StatusLine statusLine = response.getStatusLine();

              int statusCode = statusLine.getStatusCode();

              if (statusCode == 200) 
              {
                HttpEntity entity = response.getEntity();

                InputStream content = entity.getContent();

         BufferedReader reader = new BufferedReader(new InputStreamReader(content));

                String line;

                while ((line = reader.readLine()) != null) 
                {
                  builder.append(line);
                }
              } 
              else
              {
                  Log.e("==>", "Failed to download file");
              }
            } 

         catch (ClientProtocolException e) 
            {
                e.printStackTrace();
            }

         catch (IOException e) 
            {
                e.printStackTrace();
            }

        // try parse the string to a JSON object
        try 
        {
            jarray = new JSONArray(builder.toString());
        } 

        catch (JSONException e) 
            {
                Log.e("JSON Parser", "Error parsing data " + e.toString());
            }

        // return JSON String
        return jarray;
    }
    }
JsonWorking.java

    import java.util.ArrayList;
    import java.util.HashMap;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    import android.app.Activity;
    import android.os.Bundle;

    //My JSONWorking Class
    public class JsonWorking extends Activity{

    Object[] arrayObjects_hosp;

    final static String url_hospList = "http://www.xxx-xxx-xxx-xxx-xxx";

    String[] returnHospArray;

    double[] returnhospLatLng, hospLat, hospLng; 

    ArrayList<HashMap<String,String>> ResultList = new ArrayList<HashMap<String,String>>();

    //Variables for Hospital Data

   private static final String android_H_ID = "H_Id";               
   public static final String android_H_NAME = "H_Name";
   private static final String android_H_LAT = "Latitude";
   private static final String android_H_LONG = "Longitude";

@Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        new ProgressTask().execute();
    }

    private class ProgressTask extends AsyncTask<String, Void, String> {

        String response = "";

        protected void onPreExecute() {
        }

        protected void onPostExecute(String result) 
        {   
            if(response.equalsIgnoreCase("Success"))
            {
                for(int x = 0; x <= ResultList.size(); x++)
                {
                    returnHospArray[x] = ResultList.get(x).get(android_H_NAME);

                    hospLat[x] = Double.parseDouble(ResultList.get(x).get(android_H_LAT));

                    hospLng[x] = Double.parseDouble(ResultList.get(x).get(android_H_LONG));
                }

                    returnhospLatLng = new double[hospLat.length + hospLng.length];

                int count = 0;

                for (int i = 0; i < returnhospLatLng.length; i += 2) 
                {
                    returnhospLatLng[i] = hospLat[count];

                    returnhospLatLng[i + 1] = hospLng[count];

                  count++;
                }

                    arrayObjects_hosp = new Object[2];

                    arrayObjects_hosp [0] = returnHospArray;

                    arrayObjects_hosp [1] = returnhospLatLng;

                    //Hospital_List(arrayObjects_hosp);
            }
        }
        protected String doInBackground(final String... args)
        {    
            JSONParser jParser = new JSONParser();

            JSONArray jArray = jParser.getJSONFromUrl(url_hospList);

            try{

                for (int i = 0; i < jArray.length(); i++) 
                {
                    JSONObject jsonElements = jArray.getJSONObject(i);

                    String H_id = jsonElements.getString(android_H_ID);

                    String H_name = jsonElements.getString(android_H_NAME);

                    String H_lat = jsonElements.getString(android_H_LAT);

                    String H_lng = jsonElements.getString(android_H_LONG);

                    HashMap<String, String> hash = new HashMap<String, String>();

                    // adding each child node to HashMap key
                    hash.put(android_H_ID, H_id);
                    hash.put(android_H_NAME, H_name);
                    hash.put(android_H_LAT, H_lat);
                    hash.put(android_H_LONG, H_lng);

                    // adding HashList to ArrayList
                    ResultList.add(hash);
                }
                    response = "Success";
            }
                catch(JSONException e)
                    {
                        e.printStackTrace();
                    }

            return response;
        }
    }
}
日志:

12-26 18:42:17.445: D/libEGL(6285): loaded /vendor/lib/egl/libEGL_POWERVR_SGX540_120.so
12-26 18:42:17.484: D/libEGL(6285): loaded /vendor/lib/egl/libGLESv1_CM_POWERVR_SGX540_120.so
12-26 18:42:17.488: D/libEGL(6285): loaded /vendor/lib/egl/libGLESv2_POWERVR_SGX540_120.so
12-26 18:42:17.671: D/OpenGLRenderer(6285): Enabling debug mode 0
12-26 18:42:27.711: I/Choreographer(6285): Skipped 78 frames!  The application may be doing too much work on its main thread.
12-26 18:42:30.863: I/Choreographer(6285): Skipped 91 frames!  The application may be doing too much work on its main thread.
12-26 18:42:34.355: D/AndroidRuntime(6285): Shutting down VM
12-26 18:42:34.355: W/dalvikvm(6285): threadid=1: thread exiting with uncaught exception (group=0x41200300)
12-26 18:42:34.379: E/AndroidRuntime(6285): FATAL EXCEPTION: main
12-26 18:42:34.379: E/AndroidRuntime(6285): java.lang.NullPointerException
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.Engr.fyp.Process_Auto.Hospitals(Process_Auto.java:245)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.Engr.fyp.Process_Auto.access$1(Process_Auto.java:239)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.Engr.fyp.Process_Auto$2.onClick(Process_Auto.java:178)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at android.os.Looper.loop(Looper.java:137)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at android.app.ActivityThread.main(ActivityThread.java:4745)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at java.lang.reflect.Method.invokeNative(Native Method)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at java.lang.reflect.Method.invoke(Method.java:511)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
12-26 18:42:34.379: E/AndroidRuntime(6285):     at dalvik.system.NativeStart.main(Native Method)
这是一个活动课。不应创建活动类的实例。错

因此你得到了NPE

活动有自己的生命周期。如果您想在活动之间传递值,请使用intent。

可能适合您的要求。 该类具有以下方法:

putDoubleArray(String key, double[] value)
putStringArray(String key, String[] value)
getDoubleArray(String key)
getStringArray(String key)

刚刚将日志发布到..什么是第245行Process_Auto.java?Process_Auto是一个类,我想从异步任务中服务器的数据填充AlertDialog。。我将该数据传输到数组中,并在类Auto_进程中调用该数组,如:JsonWorking hname=newjsonworking;最终字符串[]hospFields=字符串[]hname.arrayObjects_hosp[0];导致NPE的那一行是什么?当代码到达这里时,错误到达类进程\自动方法中。。在这个应用程序完美运行之前。。JsonWorking hname=新JsonWorking;最终字符串[]hospFields=字符串[]hname.arrayObjects_hosp[0];请告诉我如何调用最终字符串[]hospFields=String[]hname.arrayObjects_hosp[0];从工人阶级到这个阶级的医院的过程_Auto@SyedNazarMuhammad使用intent.putExtrakey,arr[0]startactivitycontent;Intent i=新IntentJsonWorking.this,Process\u Auto.class;i.putExtrakey,String[]arrayObjects_hosp[0];斯塔维蒂;检索人:String[]hospFields=getIntent.getExtras.getStringArraykey;你不能像那样传递数组。只能传递值。或者使用arraylist,因为它实现了可序列化。我说的值不是数组arr[0]
 public class JsonWorking extends Activity{
JsonWorking hname = new JsonWorking();
final String[] hospFields = (String[]) hname.arrayObjects_hosp[0]; 
putDoubleArray(String key, double[] value)
putStringArray(String key, String[] value)
getDoubleArray(String key)
getStringArray(String key)