NullPointerException:android.widget.ListView.setAdapter(android.widget.ListAdapter)和#x27;
我试图使用NullPointerException:android.widget.ListView.setAdapter(android.widget.ListAdapter)和#x27;,android,listview,nullpointerexception,Android,Listview,Nullpointerexception,我试图使用ListView和customAdapter类在drawerLayout中显示数据,但我遇到了一个错误,我对找到解决方案感到困惑,为什么它向我显示NullPointerException java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nabia.myapplication/com.example.nabia.myapplication.Activities.FindNearb
ListView
和customAdapter
类在drawerLayout
中显示数据,但我遇到了一个错误,我对找到解决方案感到困惑,为什么它向我显示NullPointerException
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.nabia.myapplication/com.example.nabia.myapplication.Activities.FindNearbyMosque}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2693)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1389)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1184)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
at com.example.nabia.myapplication.Activities.FindNearbyMosque.onCreate(FindNearbyMosque.java:94)
at android.app.Activity.performCreate(Activity.java:6289)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
at android.app.ActivityThread.access$900(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:5942)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
下面给出了我的ListView
代码
public class FindNearbyMosque extends AppCompatActivity {
private List<ItemSlideMenu> itemSlideMenus;
private SlidingMenuAdapter slidingMenuAdapter;
private ListView listviewsliding;
private DrawerLayout drawerLayout;
private ActionBarDrawerToggle actionBarDrawerToggle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//Init component
listviewsliding = (ListView) findViewById(R.id.listView);
drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
itemSlideMenus = new ArrayList<>();
//Add itmes for sliding list
itemSlideMenus.add(new ItemSlideMenu(R.drawable.time, "Masjid Timing"));
itemSlideMenus.add(new ItemSlideMenu(R.drawable.mosque, "My Mosque"));
itemSlideMenus.add(new ItemSlideMenu(R.drawable.settings, "Setting"));
slidingMenuAdapter = new SlidingMenuAdapter(this, itemSlideMenus);
listviewsliding.setAdapter(slidingMenuAdapter);
//Display icon to open/ close sliding list
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//Set title
setTitle(itemSlideMenus.get(0).getTitle());
//Item selected
listviewsliding.setItemChecked(0, true);
//Close menu
drawerLayout.closeDrawer(listviewsliding);
//Display fragment 1 when start
replaceFragment(0);
//Handle on item click
listviewsliding.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//Set title
setTitle(itemSlideMenus.get(position).getTitle());
//Item selected
listviewsliding.setItemChecked(position, true);
//Replce Fragment
replaceFragment(position);
//close menu
drawerLayout.closeDrawer(listviewsliding);
}
});
actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_opened, R.string.drawer_closed){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
invalidateOptionsMenu();
}
};
drawerLayout.setDrawerListener(actionBarDrawerToggle);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}
//Create method replace fragment
private void replaceFragment (int pos){
Fragment fragment = null;
switch (pos){
case 0:
fragment = new MasjidTiming();
break;
case 1:
fragment = new MyMosque();
break;
case 2:
fragment = new Settings();
break;
default:
fragment = new MasjidTiming();
break;
}
if (null!=fragment)
{
FragmentManager fragmentManager = getFragmentManager();
android.app.FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.main_consent, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
}
}
公共类findnearbyActivity{
私有列表项Slidemenus;
专用滑门自适应滑门自适应;
私有列表视图列表视图;
私人抽屉布局;
私人动作bardrawertoggle动作bardrawertoggle;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//初始组件
ListView滑动=(ListView)findViewById(R.id.ListView);
抽屉布局=(抽屉布局)findViewById(R.id.抽屉布局);
itemSlideMenus=新的ArrayList();
//为滑动列表添加itmes
添加(新的ItemSlideMenu(R.drawable.time,“Masjid计时”);
添加(新的ItemSlideMenu(R.drawable.mosque,“我的清真寺”);
添加(新的ItemSlideMenu(R.drawable.settings,“设置”);
slidingMenuAdapter=新的slidingMenuAdapter(此为itemSlideMenus);
setAdapter(slidingMenuAdapter);
//显示打开/关闭滑动列表的图标
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//定名
setTitle(itemSlideMenus.get(0.getTitle());
//选定项目
listviewsliding.setItemChecked(0,true);
//关闭菜单
抽屉布局。关闭抽屉(ListView滑动);
//启动时显示片段1
替换片段(0);
//单击项目时的句柄
listviewsliding.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
//定名
setTitle(itemSlideMenus.get(position.getTitle());
//选定项目
ListViewSlideing.setItemChecked(位置,true);
//重复片段
替换碎片(位置);
//关闭菜单
抽屉布局。关闭抽屉(ListView滑动);
}
});
actionBarDrawerToggle=新actionBarDrawerToggle(此,抽屉布局,R.string.drawer\u打开,R.string.drawer\u关闭){
@凌驾
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
无效操作菜单();
}
@凌驾
图纸上的公共空白已关闭(视图抽屉视图){
super.onDrawerClosed(抽屉视图);
无效操作菜单();
}
};
抽屉布局。setDrawerListener(actionBarDrawerToggle);
}
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
actionBarDrawerToggle.syncState();
}
//创建方法替换片段
私有void replaceFragment(内部位置){
片段=空;
开关(pos){
案例0:
fragment=新的MasjidTiming();
打破
案例1:
fragment=新的MyMosque();
打破
案例2:
片段=新设置();
打破
违约:
fragment=新的MasjidTiming();
打破
}
if(null!=片段)
{
FragmentManager FragmentManager=getFragmentManager();
android.app.FragmentTransaction=fragmentManager.beginTransaction();
交易。替换(R.id.main_同意,片段);
transaction.addToBackStack(空);
commit();
}
}
}
适配器类是:
public class SlidingMenuAdapter extends BaseAdapter {
private Context context;
private List<ItemSlideMenu> Istitem;
public SlidingMenuAdapter(FindNearbyMosque context, List<ItemSlideMenu> istitem) {
this.context = context;
Istitem = istitem;
}
public int getCount() {
return Istitem.size();
}
@Override
public Object getItem(int position) {
return Istitem.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v=View.inflate(context, R.layout.itme_sliding_menu,null);
ImageView img = (ImageView)v.findViewById(R.id.item_img);
TextView tv=(TextView)v.findViewById(R.id.item_title);
ItemSlideMenu itemSlideMenu=Istitem.get(position);
img.setImageResource(itemSlideMenu.getImgid());
tv.setText(itemSlideMenu.getTitle());
return v;
}
}
公共类SlidingMenuAdapter扩展BaseAdapter{
私人语境;
私人名单制度;
公共幻灯片菜单适配器(FindNearbyMosque上下文,列表项){
this.context=上下文;
Istitem=Istitem;
}
public int getCount(){
返回Istitem.size();
}
@凌驾
公共对象getItem(int位置){
返回Istitem.get(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=视图。充气(上下文,右布局。itme\u滑动菜单,空);
ImageView img=(ImageView)v.findViewById(R.id.item_img);
TextView tv=(TextView)v.findViewById(R.id.item_title);
ItemSlideMenu ItemSlideMenu=Istitem.get(位置);
setImageResource(itemSlideMenu.getImgid());
tv.setText(itemSlideMenu.getTitle());
返回v;
}
}
在适配器类中,更改此行
View v=View.inflate(context, R.layout.itme_sliding_menu,null);
与
并替换
返回v代码>带有返回视图代码>您没有在活动中调用setContentView,因此无法找到您的ListView。我已通过添加setContentView(R.layout.activity\u map)修复了我的问题代码>行在创建方法中。确保尝试清理项目。这解决了我的问题。我想android studio生成了错误的ID列表,这导致了运行时错误 可能是重复的,我已经检查过了,但我无法从中找到解决方案。它说您的ListViewSlideing为空。请检查XML一次以匹配ID。每个NPE都有相同的来源:对象在实例化之前已被使用。每个NPE都有相同的解决方案:找到那个对象并在使用它之前对它进行实例验证。你的答案是有帮助的,但它并不能解决主要问题。我的问题还是一样,是索尔维
if(convertView == null){
convertView = View.inflate(context, R.layout.itme_sliding_menu,null);
}