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