问题遇到的现象和发生背景
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.