У меня есть активность, показывающая категории мест в виде списка. Когда я пытаюсь нажать на элемент списка, приложение рушится из-за исключения NullPointerException. Ниже активностьКак решить 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;
}
}
Из ошибок я узнал, что мой Apdater получение «nameAddressList» в нуль, так как код в doInBakground не выполняется. Поэтому он бросает 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)
Вы понимаете, что при добавлении данных данные равны нулю, поскольку он еще не был загружен фоновым потоком. Вы знаете, как работает нить? Вам нужно заполнить список в потоке ПОСЛЕ того, как данные были загружены. –
@Pedro Oliveria Я никогда не работал до Async Tasks and Threading. Не могли бы вы рассказать мне, как это кодировать. Спасибо – Akshay
nameAddressList имеет значение null, если вы не переходите в условие else; возможно, вы ошибаетесь. – duffymo