我有一個活動在列表視圖中顯示地點的類別。當我嘗試點擊列表項目時,由於NullPointerException,應用程序崩潰。以下是我才知道,我的Apdater獲得「nameAddressList」爲null,因爲不執行doInBakground代碼活動如何解決NullPointerException
public class ListOfPlacesActivity extends Activity {
ListView listView;
public String tag_name;
public List<NameAddress> nameAddressList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_of_places);
listView = (ListView) findViewById(R.id.list_of_places);
Intent intent = getIntent();
if(intent!= null)
{
tag_name = intent.getStringExtra("CategoryName");
}
nameAddressList = null;
try
{
final XMLDOMParserHandler parser = new XMLDOMParserHandler(tag_name.toLowerCase(), this);
if(isConnectivityOn(this)){
BackgroundRunner.doInBackground(new BackgroundRunner.DoInBackground() {
@Override
public void execute() {
try {
URL myURL = new URL("http://somewebsite.com/admin/data.xml");
URLConnection ucon = myURL.openConnection();
final InputStream is = ucon.getInputStream();
runOnUiThread(new Runnable() {
@Override
public void run() {
nameAddressList = parser.parseXML(is);
}
});
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
});
} else {
nameAddressList = parser.parseXML(getAssets().open("data.xml"));
}
ListOfPlacesAdapter listOfPlacesAdapter = new ListOfPlacesAdapter(this, nameAddressList);
listView.setAdapter(listOfPlacesAdapter);
listView.setItemsCanFocus(true);
}
catch (IOException e)
{
e.printStackTrace();
}
}
public boolean isConnectivityOn(Context context) {
boolean resCode = false;
try {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
resCode = cm.getActiveNetworkInfo().isConnectedOrConnecting();
} catch (Exception e) {
e.printStackTrace();
}
return resCode;
}
}
從錯誤。所以它拋出了NullPointerException。我想知道如何解決這個問題
以下是我得到的錯誤:
java.lang.RuntimeException: Unable to start activity ComponentInfo{asm.sdsuhood.app/asm.sdsuhood.app.places.ListOfPlacesActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2305)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at asm.sdsuhood.app.places.ListOfPlacesAdapter.getCount(ListOfPlacesAdapter.java:43)
at android.widget.ListView.setAdapter(ListView.java:486)
at asm.sdsuhood.app.places.ListOfPlacesActivity.onCreate(ListOfPlacesActivity.java:81)
at android.app.Activity.performCreate(Activity.java:5426)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2269)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2363)
at android.app.ActivityThread.access$900(ActivityThread.java:161)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1265)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5356)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)
當您添加數據時,您會意識到數據爲空,因爲它尚未被後臺線程下載。你知道一個線程是如何工作的嗎?您需要填寫線程後的列表視圖在數據下載完成後 – 2014-10-02 14:44:52
@Pedro Oliveria我在異步任務和線程之前從未工作過。你能告訴我如何編碼嗎?謝謝 – Akshay 2014-10-02 14:46:44
nameAddressList爲空,除非你進入else條件;也許你錯誤地假設了。 – duffymo 2014-10-02 14:46:54