qq_52140723 2022-10-21 15:22 采纳率: 0%
浏览 134

android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

问题遇到的现象和发生背景

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference

用代码块功能插入代码,请勿粘贴截图

fragtemt代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:id="@+id/et_query"
        android:layout_width="270dp"
        android:layout_height="40dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginTop="15dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_toStartOf="@+id/btn_query"
        android:layout_toLeftOf="@+id/btn_query"
        android:gravity="center"
        android:hint="请输入查询内容"
        android:textSize="18dp" />

    <Button
        android:id="@+id/btn_query"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@+id/et_query"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginEnd="17dp"
        android:layout_marginRight="16dp"
        android:text="查询" />

    <ListView
        android:id="@+id/lv_notice"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="#000000"
        android:scrollbars="vertical"
        android:dividerHeight="1dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="80dp"
        android:layout_marginBottom="60dp" />

    <EditText
        android:id="@+id/et_content"
        android:layout_width="263dp"
        android:layout_height="42dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="24dp"
        android:layout_marginLeft="24dp"
        android:layout_marginBottom="15dp"
        android:gravity="center"
        android:hint="请输入公告内容"
        android:textColor="@color/black" />

    <Button
        android:id="@+id/btn_release"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/et_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="14dp"
        android:layout_marginLeft="14dp"
        android:layout_marginEnd="17dp"
        android:layout_marginRight="17dp"
        android:layout_marginBottom="8dp"
        android:layout_toEndOf="@+id/et_content"
        android:layout_toRightOf="@+id/et_content"
        android:text="发布" />
</RelativeLayout>
list_item代码
<TextView
    android:id="@+id/lv_content"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="16sp" />
ListViewAdapter代码 package com.example.demo8.Adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

import com.example.demo8.R;

import java.util.List;

public class ListViewAdapter extends BaseAdapter {
private List datas; //数据集合
private Context context;
public ListViewAdapter(Context context,List datas){
this.context=context;
this.datas=datas;
}
@Override
public int getCount() {
return datas.size();
}

@Override
public Object getItem(int position) {
    return datas.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView ==null){        //convertView为空是,构造一个view
        holder=new ViewHolder();
        convertView= LayoutInflater.from(context).inflate(R.layout.list_item,parent,false);
        holder.name=convertView.findViewById(R.id.lv_content);
        convertView.setTag(holder);
    }else{
        holder=(ViewHolder) convertView.getTag();
    }
    holder.name.setText(datas.get(position));
    return convertView;
}

class ViewHolder {      //内部类,存储缓存
    TextView name;      //定义的时list_item对应的元素
}

}
mainActivity代码
package com.example.demo8;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.Toast;

import com.example.demo8.Adapter.ListViewAdapter;
import com.example.demo8.Database.DBUtils;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
FragmentPagerAdapter fragmentPagerAdapter;
List list;
ViewPager viewPager;
ImageButton notice, forum, fee, leave, my;
private ListView listView;
private List datas=new ArrayList<>();
private ListViewAdapter listViewAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    DBUtils.mymysql();
    ListView listView=(ListView)this.findViewById(R.id.lv_notice);
    if (listView==null)
        Log.i("debug","null");
    listViewAdapter = new ListViewAdapter(this,datas);
    listView.setAdapter(listViewAdapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Toast.makeText(MainActivity.this,
                    datas.get(position),Toast.LENGTH_LONG).show();
        }
    });
    for(int i=1;i<=48;i++){
        datas.add("这是第"+i+"条数据");
    }
    listViewAdapter.notifyDataSetChanged();
    initData();
    viewPager = (ViewPager) findViewById(R.id.viewPager);
    notice = (ImageButton) findViewById(R.id.btn_notice);
    forum = (ImageButton) findViewById(R.id.btn_forum);
    fee = (ImageButton) findViewById(R.id.btn_fee);
    leave = (ImageButton) findViewById(R.id.btn_leave);
    my = (ImageButton) findViewById(R.id.btn_my);
    //添加点击事件
    notice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //让按钮背景重置
            resetImgs();
            selectTab(0);
        }
    });
    forum.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //让按钮背景重置
            resetImgs();
            selectTab(1);
        }
    });
    fee.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //让按钮背景重置
            resetImgs();
            selectTab(2);
        }
    });
    leave.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //让按钮背景重置
            resetImgs();
            selectTab(3);
        }
    });
    my.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //让按钮背景重置
            resetImgs();
            selectTab(4);
        }
    });
}
public void initData() {
    //获取四个框架
    list = new ArrayList<Fragment>();
    list.add(new NoticeFragment());
    list.add(new ForumFragment());
    list.add(new FeeFragment());
    list.add(new LeaveFragment());
    list.add(new MyFragment());
    //
    FragmentPagerAdapter fragmentPagerAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
        @NonNull
        @Override
        public Fragment getItem(int position) {
            return list.get(position);
        }

        @Override
        public int getCount() {
            return list.size();
        }
    };
    viewPager.setAdapter(fragmentPagerAdapter);
}
public void resetImgs() {
    notice.setImageResource(R.mipmap.notice_normal);
    forum.setImageResource(R.mipmap.forum_normal);
    fee.setImageResource(R.mipmap.fee_normal);
    leave.setImageResource(R.mipmap.leave_normal);
    my.setImageResource(R.mipmap.my_normal);
}
public void selectTab(int i) {
    switch (i) {
        case 0:
            notice.setImageResource(R.mipmap.notice_pressed);
            break;
        case 1:
            forum.setImageResource(R.mipmap.forum_pressed);
            break;
        case 2:
            fee.setImageResource(R.mipmap.fee_pressed);
            break;
        case 3:
            leave.setImageResource(R.mipmap.leave_pressed);
            break;
        case 4:
            my.setImageResource(R.mipmap.my_pressed);
            break;
    }
    viewPager.setCurrentItem(i);
}

}

运行结果及报错内容

日记

10/21 15:09:37: Launching 'app' on Pixel 6 Pro API 33.
Install successfully finished in 528 ms.
$ adb shell am start -n "com.example.demo8/com.example.demo8.MainActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Connected to process 15096 on device 'Pixel_6_Pro_API_33 [emulator-5554]'.
Capturing and displaying logcat messages from application. This behavior can be disabled in the "Logcat output" section of the "Debugger" settings page.
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/NetworkSecurityConfig: No Network Security Config specified, using platform default
D/libEGL: loaded /vendor/lib64/egl/libEGL_emulation.so
D/libEGL: loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so
D/libEGL: loaded /vendor/lib64/egl/libGLESv2_emulation.so
W/m.example.demo8: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/Rect;)Z (unsupported, reflection, allowed)
W/m.example.demo8: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (unsupported, reflection, allowed)
D/CompatibilityChangeReporter: Compat change id reported: 210923482; UID 10171; state: DISABLED
D/CompatibilityChangeReporter: Compat change id reported: 37756858; UID 10171; state: ENABLED
D/CompatibilityChangeReporter: Compat change id reported: 171228096; UID 10171; state: ENABLED
I/debug: null
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.demo8, PID: 15096
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.demo8/com.example.demo8.MainActivity}: 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:3676)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
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.demo8.MainActivity.onCreate(MainActivity.java:41)
at android.app.Activity.performCreate(Activity.java:8290)
at android.app.Activity.performCreate(Activity.java:8269)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1384)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3657)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3813) 
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:101) 
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2308) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loopOnce(Looper.java:201) 
at android.os.Looper.loop(Looper.java:288) 
at android.app.ActivityThread.main(ActivityThread.java:7898) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936) 
V/mysql11111: 加载JDBC驱动成功
D/TrafficStats: tagSocket(78) with statsTag=0xffffffff, statsUid=-1
D/mysql11111: 数据库连接成功
W/System: A resource failed to call close.

我的解答思路和尝试过的方法 找过很多解决办法,都不行
  • 写回答

2条回答 默认 最新

  • 码上就疯 2022-10-21 15:27
    关注

    你的ListView是在Fragment对应的布局里面,结果你在MainActivity中初始化,当然为空了

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 10月21日

悬赏问题

  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错