我使用套接字来检索信息,并且我使用了两次asynctask(第一个异步任务工作正常,但第二个asynctask&on onPostExceute触发NullPointerException
)
下面是我的asynctask代码。
// ******THE FIRST LINE IS GIVEN AN ERROR [LINE:123]
private class SendMessage extends AsyncTask<Void, Void, String> {
@Override
protected void onPreExecute() {
progressBar.setVisibility(View.VISIBLE);
//CargoHelper is a class where the below two lists are present
Cargo_Helper.list_AI = new ArrayList<Cargo_Details>();
Cargo_Helper.list_ING = new ArrayList<Cargo_Details>();
if(count!=1) {
listView.setVisibility(View.INVISIBLE);
Log.d("sri", "onPreExecute" + count);
al.clear();
}
if(count == 1){
listView.setVisibility(View.VISIBLE);
Log.d("sri", "onPreExecute" + count);
id = "C";
}
}
@Override
protected String doInBackground(Void... params) {
l1:
try {
// this part works fine
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.print("connection closed");
return message;
}
private void updateListView(String message) {
//updates listview this part works well
}
}
@Override
protected void onPostExecute(String message) {
progressBar.setVisibility(View.INVISIBLE);
cargo.setVisibility(View.VISIBLE);
if (message != null) {
listView.setVisibility(View.VISIBLE);
if(count!=1) {
updateListView(message);
count = 1;
Log.d("sri","onPostExecute"+count);
}
else{
//Toast.makeText(getApplicationContext(),"List obtained:" + al,Toast.LENGTH_LONG).show();
Log.d("sri", "In onPostExecute" + message);
// sort_the_objects_for_LV(message);
if(isDes)
return;
if(message!=null || message!=" ") {
String[] arr = message.split(" ");
if (arr[1].equals("AI4565"))
//******* THIS LINE IS ERRORED..I HAVE INTIALIZED THE LIST IN PREEXECUTE ITSELF [LINE :287]
Cargo_Helper.list_AI.add(new Cargo_Details(arr[0], arr[1]
Long.getLong(arr[2]), arr[3], Integer.parseInt(arr[4])));
else if (arr[1].equals("ING1234")) {
Cargo_Helper.list_ING.add(new Cargo_Details(arr[0], arr[1], Long.getLong(arr[2]), arr[3], Integer.parseInt(arr[4])));
}
// to be continued for all flights
// to be continued for all flights
}
}
}
}
}
货物运输舱如下
public class Cargo_Helper {
static List<Cargo_Details> list_AI=null;
static List<Cargo_Details> list_ING=null;
public static List<Cargo_Details> get_AirIndia_Cargo(){ return list_AI;
}
public static List<Cargo_Details> get_Indigo_Cargo(){
return list_ING;
}
}
堆栈跟踪在这里..
E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.NullPointerException at airhost.project_2_phase.All_Flight_No_Obtain_Activity$SendMessage.onPostExecute(All_Flight_No_Obtain_Activity.java:287)
at airhost.project_2_phase.All_Flight_No_Obtain_Activity$SendMessage.onPostExecute(All_Flight_No_Obtain_Activity.java:123)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5409)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
at dalvik.system.NativeStart.main(Native Method)
我知道这个问题被多次询问,大多数答案是关于初始化特定的事情,这里是关于初始化List数据类型。我甚至已经初始化它但我无法理解为什么它会抛弃我的NPE。
答案 0 :(得分:0)
问题是这个模型类Cargo_Helper
它有2个静态属性,你设置为null,每次访问它时都会得到null。
您可以尝试这样的事情:
public class Cargo_Helper {
//you cargo details
public static class Cargo_Details {
public Cargo_Details() {
}
}
public static List<Cargo_Details> list_AI = new ArrayList<Cargo_Details>();
public static List<Cargo_Details> list_ING = new ArrayList<Cargo_Details>();
static {
//some code here
}
private static void addAirIndiaCargo(Cargo_Details cargo) {
list_AI.add(cargo);
}
private static void addAirIndigoCargo(Cargo_Details cargo) {
list_ING.add(cargo);
}
}
例如
Cargo_Helper.list_AI.add(new Cargo_Details());
然后你可以直接访问Cargo_Helper.list_AI
,因为它是静态的。
我不知道这样的助手是否有用,但也许你可以扩展它