Not showing null elements java错误解决方案

本文介绍了解决Java中List集合含有null元素导致的问题。通过使用list.removeAll(Collections.singleton(null))的方法可以有效移除List中的null值,避免后续处理时出现错误。

原因:
list集合允许null值,当你给list添加null值后,再进行一系列处理就会报错

Not showing null elements

解决方案:

list.removeAll(Collections.singleton(null));

在需要处理list前,使用一下这句代码就OK了。
removeAll是移除所有括号内的元素,如果括号内参数为空代表移除所有

END
如果帮您解决了问题,请给我一个赞吧,谢谢您。

请优化以下android代码:main.java :package com.example.myapplication.Fragment; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; import androidx.viewpager.widget.ViewPager; import com.example.myapplication.R; import com.example.myapplication.Viewpagerhd.Mypageradapter; import java.util.ArrayList; import java.util.List; public class Fragment_main extends AppCompatActivity implements View.OnClickListener { private Fragment fragment1, fragment2, fragment3; private TextView tab1, tab2, tab3; private ViewPager myViewpager; private List<Fragment> fragmentList; private Mypageradapter mypageradapter; private Fragment currentFragment; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fragment1); initUI(); // initFragments(); initTab(); } private void initTab() { fragmentList = new ArrayList<Fragment>(); fragmentList.add(new Fragmenta_1()); fragmentList.add(new Fragmenta_2()); fragmentList.add(new Fragmenta_3()); // 使用修正后的适配器 mypageradapter = new Mypageradapter(getSupportFragmentManager(), fragmentList); myViewpager.setAdapter(mypageradapter); myViewpager.addOnPageChangeListener(new MyPageChangeListennr()); // 修正监听器设置 showFragment(0); } private void showFragment(int i) { myViewpager.setCurrentItem(i); if (i == 0){ tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (i==1){ tab2.setBackgroundColor(Color.RED); tab1.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (i==2){ tab3.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab1.setBackgroundColor(Color.WHITE); } } public class MyPageChangeListennr implements ViewPager.OnPageChangeListener { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { if (position==0){ tab1.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (position==1){ tab2.setBackgroundColor(Color.RED); tab1.setBackgroundColor(Color.WHITE); tab3.setBackgroundColor(Color.WHITE); }else if (position==2){ tab3.setBackgroundColor(Color.RED); tab2.setBackgroundColor(Color.WHITE); tab1.setBackgroundColor(Color.WHITE); } } @Override public void onPageScrollStateChanged(int state) { } } private void initUI() { tab1 = findViewById(R.id.T1); tab2 = findViewById(R.id.T2); tab3 = findViewById(R.id.T3); tab1.setOnClickListener(this); tab2.setOnClickListener(this); tab3.setOnClickListener(this); myViewpager =(ViewPager) findViewById(R.id.myviewpage); // updateTabColors(R.id.T1); } // private void initFragments() { // FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); // // // 按顺序添加所有Fragment // fragment1 = new Fragmenta_1(); // fragment2 = new Fragmenta_2(); // fragment3 = new Fragmenta_3(); // // transaction.add(R.id.view_pager, fragment1, "1"); // transaction.add(R.id.view_pager, fragment2, "2"); // transaction.add(R.id.view_pager, fragment3, "3"); // // transaction.hide(fragment2); // transaction.hide(fragment3); // transaction.commitNow(); // 立即提交事务 // // currentFragment = fragment1; // } @Override public void onClick(View v) { if (v.getId()==R.id.T1) { showFragment(0); }else if (v.getId()==R.id.T2){ showFragment(1); }else if (v.getId()==R.id.T3){ showFragment(2); } } private void switchFragment(Fragment targetFragment, int tabId) { if (targetFragment == currentFragment) return; FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); transaction.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); transaction.hide(currentFragment); transaction.show(targetFragment); transaction.commitNow(); // 使用立即提交 currentFragment = targetFragment; updateTabColors(tabId); } private void updateTabColors(int selectedTabId) { int defaultColor = Color.WHITE; int selectedColor = Color.RED; tab1.setBackgroundColor(selectedTabId == R.id.T1 ? selectedColor : defaultColor); tab2.setBackgroundColor(selectedTabId == R.id.T2 ? selectedColor : defaultColor); tab3.setBackgroundColor(selectedTabId == R.id.T3 ? selectedColor : defaultColor); } } 适配器:package com.example.myapplication.Fragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; import java.util.List; public class Mypageradapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; public Mypageradapter(FragmentManager fm) { super(fm); } public Mypageradapter(FragmentManager fm, List<Fragment>fragmentList) { super(fm); this.fragmentList=fragmentList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } } 运行日志:2025-05-29 13:58:01.366 22820-22820/? E/e.myapplicatio: Unknown bits set in runtime_flags: 0x8000 2025-05-29 13:58:02.024 22820-22820/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 22820 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.Fragment.Fragment_main}: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 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:2016) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7356) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930) Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'int java.util.List.size()' on a null object reference at com.example.myapplication.Viewpagerhd.Mypageradapter.getCount(Mypageradapter.java:40) at androidx.viewpager.widget.ViewPager.setAdapter(ViewPager.java:532) at com.example.myapplication.Fragment.Fragment_main.initTab(Fragment_main.java:46) at com.example.myapplication.Fragment.Fragment_main.onCreate(Fragment_main.java:35) at android.app.Activity.performCreate(Activity.java:7802) at android.app.Activity.performCreate(Activity.java:7791) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)  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:2016)  at android.os.Handler.dispatchMessage(Handler.java:107)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:7356)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)  运行时,代码没有报错,但是应用打不开,只是闪一下就退出
05-30
package com.lc.bailingbird.home; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.graphics.Typeface; import android.os.Build; import android.util.Log; import android.view.MotionEvent; import android.view.View; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.github.mikephil.charting.components.AxisBase; import com.github.mikephil.charting.components.XAxis; import com.github.mikephil.charting.components.YAxis; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.formatter.ValueFormatter; import com.github.mikephil.charting.highlight.Highlight; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.github.mikephil.charting.utils.MPPointD; import com.lc.bailingbird.R; import com.lc.bailingbird.api.ApiWrapper; import com.lc.bailingbird.api.NetworkSubscriber; import com.lc.bailingbird.base.BaseActivity; import com.lc.bailingbird.databinding.ActivityReportDetailBinding; import com.lc.bailingbird.entity.AddReportEntity; import com.lc.bailingbird.entity.CommonEntity; import com.lc.bailingbird.entity.ReportDetailEntity; import com.llw.network.core.ApiException; import com.zcx.helper.view.toast.ToastUtils; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; public class ReportDetailActivity extends BaseActivity<ActivityReportDetailBinding> { private TreeMap<Integer, Integer> leftEarData = new TreeMap<>(); private TreeMap<Integer, Integer> rightEarData = new TreeMap<>(); private TreeMap<Integer, String> frequencies = new TreeMap<>(); // private final int[] fixedFrequencies=null; private List<Integer> fixedFrequencies; private ReportDetailEntity.DetailBean data; public static void start(Context context, String id) { Intent starter = new Intent(context, ReportDetailActivity.class); starter.putExtra("id", id); context.startActivity(starter); } @Override protected void iniClick() { binding.btnAiDebug.setOnClickListener(this::onWidgetClick); binding.btnHandDebug.setOnClickListener(this::onWidgetClick); } @Override public void onWidgetClick(View view) { super.onWidgetClick(view); int id = view.getId(); if (id == R.id.btn_ai_debug) { //AI调试 } else if (id == R.id.btn_hand_debug) { //精细调节 DeviceControlActivity.start(this, ""); } } @Override public void iniData() { super.iniData(); // ApiWrapper.get().getReportDetail(getIntent().getStringExtra("id")) ApiWrapper.get().getReportDetail("15") .subscribe(new NetworkSubscriber<ReportDetailEntity>() { @Override public void onSuccess(ReportDetailEntity bean) { data = bean.getData(); initializeData(); } @Override public void onFail(ApiException e) { //请求失败 super.onFail(e); ToastUtils.show(e.getError_msg()); // dismissProgressView(); } }); } @Override public void iniView() { super.iniView(); binding.topbar.setTitle("听力测试报告").setTypeface(Typeface.DEFAULT_BOLD); binding.topbar.addLeftImageButton(R.mipmap.ic_back, R.id.tv).setOnClickListener(view -> finish()); } private void initializeData() { //根据返回数据来绘制折线图 // 初始化固定频率点的默认值 if (data.getHearingImgList().size() == 1) { for (ReportDetailEntity.DetailBean.HearingItem.ValueItem item : data.getHearingImgList().get(0).getHearingImgValueList()) { if (data.getHearingImgList().get(0).getTestSubject() == 1) { leftEarData.put(item.getFrequency(), item.getDecibelLevel()); frequencies.put(item.getFrequency(), ""); } else { rightEarData.put(item.getFrequency(), item.getDecibelLevel()); frequencies.put(item.getFrequency(), ""); } } } else if (data.getHearingImgList().size() == 2) { for (ReportDetailEntity.DetailBean.HearingItem.ValueItem item : data.getHearingImgList().get(0).getHearingImgValueList()) { leftEarData.put(item.getFrequency(), item.getDecibelLevel()); frequencies.put(item.getFrequency(), ""); } for (ReportDetailEntity.DetailBean.HearingItem.ValueItem item : data.getHearingImgList().get(1).getHearingImgValueList()) { rightEarData.put(item.getFrequency(), item.getDecibelLevel()); frequencies.put(item.getFrequency(), ""); } } fixedFrequencies = new ArrayList<>(frequencies.keySet()); Log.e("TAG折线图底部", leftEarData.toString() + rightEarData.toString()); Log.e("TAG折线图", frequencies.keySet().toString()); setupChart(); loadData(); } private void setupChart() { // X轴配置 (对数坐标) XAxis xAxis = binding.lineChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setAvoidFirstLastClipping(true); // 避免首尾标签被裁剪 xAxis.setLabelCount(fixedFrequencies.size()); // 固定标签数量为10 xAxis.setLabelRotationAngle(45f); // 90度垂直 xAxis.setSpaceMin(0.5f); // 标签左右留白 xAxis.setSpaceMax(0.5f); xAxis.setGranularity(1f); xAxis.setAxisMinimum(0f); // 下限250→log200 xAxis.setAxisMaximum(fixedFrequencies.size() - 1); // 上限8000→log9000 xAxis.setValueFormatter(new ValueFormatter() { @Override public String getAxisLabel(float logValue, AxisBase axis) { int index = (int) logValue; Log.e("index",logValue+""); return (index >= 0 && index < fixedFrequencies.size()) ? formatFrequency((float) fixedFrequencies.get(index)) : ""; } }); // xAxis.setAxisMinimum(Collections.min(fixedFrequencies)); // xAxis.setAxisMaximum(Collections.max(fixedFrequencies)); // xAxis.setLabelCount(fixedFrequencies.size(), true); // xAxis.setValueFormatter(new ValueFormatter() { // @Override // public String getFormattedValue(float value) { // return String.valueOf((int) value); // } // }); Log.d("ChartDebug", "X轴范围: " + xAxis.getAxisMinimum() + " - " + xAxis.getAxisMaximum()); // Y轴配置 (分贝值) YAxis yAxis = binding.lineChart.getAxisLeft(); yAxis.setAxisMinimum(-10f); yAxis.setAxisMaximum(120f); yAxis.setLabelCount(14, true); // 固定13等分 yAxis.setInverted(true); yAxis.setGranularity(10f); yAxis.setValueFormatter(new ValueFormatter() { @Override public String getAxisLabel(float value, AxisBase axis) { return String.format(Locale.US, "%.0f", value); } }); binding.lineChart.getAxisRight().setEnabled(false); // 图表交互设置 binding.lineChart.getLegend().setEnabled(false); binding.lineChart.setVisibleXRangeMaximum(10); // 单屏最多显示10个单位 binding.lineChart.setDragEnabled(false); binding.lineChart.setScaleEnabled(false); binding.lineChart.setPinchZoom(false); binding.lineChart.setExtraOffsets(0f, 0f, 15f, 15f); // 左、上、右、下偏移; binding.lineChart.getDescription().setEnabled(false); } // 格式化频率显示 private String formatFrequency(float freq) { // if (!visibleFrequencies.contains(freq)) return ""; return freq >= 1000 ? String.format(Locale.US, "%.0fk", freq / 1000) : String.format(Locale.US, "%.0f", freq); } // 加载数据 private void loadData() { List<ILineDataSet> dataSets = new ArrayList<>(); // 左耳数据集 LineDataSet leftDataSet = new LineDataSet( createEntries(0, leftEarData), "Left Ear" ); configDataSet(leftDataSet, Color.parseColor("#097bf8"), 0); dataSets.add(leftDataSet); // 右耳数据集 LineDataSet rightDataSet = new LineDataSet( createEntries(1, rightEarData), "Right Ear" ); configDataSet(rightDataSet, Color.parseColor("#ff854d"), 1); dataSets.add(rightDataSet); binding.lineChart.setData(new LineData(rightDataSet)); binding.lineChart.invalidate(); Log.d("ChartDebug", "数据集1点数: " + leftDataSet.getEntryCount()); Log.d("ChartDebug", "数据集2点数: " + rightDataSet.getEntryCount()); } // 创建数据条目 private List<Entry> createEntries(int type, TreeMap<Integer, Integer> dataMap) { List<Entry> entries = new ArrayList<>(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { dataMap.forEach((key,value)->{ Entry entry = new Entry((float)value,(float)key); if (type == 0) { entry.setIcon(getResources().getDrawable(R.mipmap.iv_left_point)); } entries.add(entry); }); } Log.e("entries",entries.size()+""); // 按频率排序 Collections.sort(entries, (e1, e2) -> Float.compare(e1.getX(), e2.getX())); return entries; } // 数据集样式配置 private void configDataSet(LineDataSet dataSet, int color, int type) { dataSet.setColor(color); dataSet.setLineWidth(2f); dataSet.setDrawValues(false); if (type == 1) { dataSet.setCircleColor(color); dataSet.setCircleRadius(4f); dataSet.setDrawCircles(true); dataSet.setDrawCircleHole(true); } else { dataSet.setDrawCircles(false); dataSet.setDrawCircleHole(false); } dataSet.setMode(LineDataSet.Mode.LINEAR); } } 两条折线图没有绘制出来是什么原因
最新发布
07-03
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值