在自定义 ListView 中获取 NullPointerException

2024-06-24

当我运行我的应用程序时,我收到这样的错误:

02-27 22:59:19.331: E/AndroidRuntime(2060): FATAL EXCEPTION: main
02-27 22:59:19.331: E/AndroidRuntime(2060): java.lang.NullPointerException
02-27 22:59:19.331: E/AndroidRuntime(2060):     
        at myPlanAdapter.getView(MyPlanActivity.java:145)
        02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.AbsListView.obtainView(AbsListView.java:1315)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.ListView.measureHeightOfChildren(ListView.java:1198)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.ListView.onMeasure(ListView.java:1109)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.View.measure(View.java:8171)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1012)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:381)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:304)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.View.measure(View.java:8171)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.View.measure(View.java:8171)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3132)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.View.measure(View.java:8171)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.ViewRoot.performTraversals(ViewRoot.java:801)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.view.ViewRoot.handleMessage(ViewRoot.java:1727)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.os.Handler.dispatchMessage(Handler.java:99)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.os.Looper.loop(Looper.java:123)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at android.app.ActivityThread.main(ActivityThread.java:4627)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at java.lang.reflect.Method.invokeNative(Native Method)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at java.lang.reflect.Method.invoke(Method.java:521)
    02-27 22:59:19.331: E/AndroidRuntime(2060):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)

我的源代码是:

public class MyPlanActivity extends Activity implements OnItemClickListener,
        OnClickListener {
    private String TAG = "MyPlanActivity";
    private Button addButton = null;
    private ListView listView;
    myPlanAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        viewInit();
        adapter = new myPlanAdapter(getBaseContext());
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(this);

    }

    private void viewInit() {
        setContentView(R.layout.myplan);
        addButton = (Button) findViewById(R.id.AddMyPlanButtonId);
        listView = (ListView) findViewById(R.id.myPlanListViewId);
        addButton.setOnClickListener(this);

    }

    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.AddMyPlanButtonId:
            startActivity(new Intent(this, AddMyPlan.class));
            break;

        default:
            break;
        }
    }

    public void onItemClick(AdapterView<?> paramAdapterView, View paramView,
            int paramInt, long paramLong) {
        // TODO Auto-generated method stub

    }

    @Override
    protected void onResume() {
        super.onResume();
        adapter.notifyDataSetChanged();
    }

    private class myPlanAdapter extends ArrayAdapter<MyPlan> {
        Context context;
        MyPlanDataSource dataSource;

        public myPlanAdapter(Context context) {
            super(context, R.layout.myplan_list_view_entry);
            this.context = context;
            dataSource = new MyPlanDataSource(context);
        }

        private ArrayList<MyPlan> getAllPlan() {

            dataSource.open();
            ArrayList<MyPlan> allPlan = dataSource.getAllPlan();
            dataSource.close();
            Log.d(TAG,allPlan.get(0).getSubjectName());
            return allPlan;
        }

        @Override
        public int getCount() {
            Log.d(TAG,"Size: "+getAllPlan().size());
            return getAllPlan().size();
        }

        @Override
        public MyPlan getItem(int position) {
            return getAllPlan().get(position);
        }

        @Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            View row = convertView;
            if (row == null)
            {
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                row = inflater.inflate(R.layout.myplan_list_view_entry, parent,
                        false);

                final PlanViewHolder viewHolder = new PlanViewHolder();

                viewHolder.subjectName = (TextView) findViewById(R.id.myPlanListSubNameTextViewId);
                viewHolder.targetGrade = (TextView) findViewById(R.id.myPlanListTargetGradeTextViewId);
                viewHolder.duration = (TextView) findViewById(R.id.myPlanListDurationTextViewId);
                viewHolder.examDate = (TextView) findViewById(R.id.myPlanListExamDateTextViewId);
                viewHolder.daysTogo = (TextView) findViewById(R.id.myplanListDaystogoBoardTextViewId);
                viewHolder.delete = (ImageView) findViewById(R.id.myPlanDeleteImageViewId);
                Log.d(TAG, "" + position);

                row.setTag(viewHolder);
            }
            final PlanViewHolder holder = (PlanViewHolder) row.getTag();


            holder.subjectName.setText((getAllPlan().get(position) 
                    .getSubjectName())); // line 145
            holder.targetGrade.setText("Grade : "
                    + getAllPlan().get(position).getTargetGrade());
            holder.duration.setText(getAllPlan().get(position).getExamTime());
            holder.examDate.setText(getAllPlan().get(position).getExamDate());



            holder.daysTogo.setText(getAllPlan().get(position).getDaysTogo());

            holder.delete.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(
                            context);
                    builder.setTitle("DELETE")
                            .setMessage(
                                    "Are you sure you want to delete this Subject?")
                            .setCancelable(false)
                            .setPositiveButton("Yes",
                                    new DialogInterface.OnClickListener()
                                    {
                                        public void onClick(
                                                DialogInterface dialog, int id)
                                        {

                                            dataSource.open();
                                            dataSource
                                                    .deletePlan(getItem(position));
                                            dataSource.close();
                                            notifyDataSetChanged();
                                        }
                                    })
                            .setNegativeButton("No",
                                    new DialogInterface.OnClickListener()
                                    {
                                        public void onClick(
                                                DialogInterface dialog, int id)
                                        {
                                            dialog.cancel();
                                        }
                                    });
                    AlertDialog alert = builder.create();
                    alert.show();

                }
            });


            return row;
        }
    }

    static class PlanViewHolder {
        private TextView subjectName;
        private TextView targetGrade;
        private TextView duration;
        private TextView examDate;
        private TextView daysTogo;
        private ImageView delete;
    }

}

我认为您在错误的位置搜索行视图。尝试在充气的行中找到它们view(in the getView()方法):

viewHolder.subjectName = (TextView) row.findViewById(R.id.myPlanListSubNameTextViewId);
viewHolder.targetGrade = (TextView) row.findViewById(R.id.myPlanListTargetGradeTextViewId);
viewHolder.duration = (TextView) row.findViewById(R.id.myPlanListDurationTextViewId);
viewHolder.examDate = (TextView) row.findViewById(R.id.myPlanListExamDateTextViewId);
viewHolder.daysTogo = (TextView) row.findViewById(R.id.myplanListDaystogoBoardTextViewId);
viewHolder.delete = (ImageView) findViewById(R.id.myPlanDeleteImageViewId);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在自定义 ListView 中获取 NullPointerException 的相关文章

  • Xamarin 代码安全

    我正在开发一个涉及付款的应用程序 我将在应用程序中采用某种加密 并在服务器后端采用某种加密和安全性 我想知道如何保护我的 Xamarin 代码 特别是在部署到 Android 时 我知道 Xamarin iOS 转换为本机代码 但 Xama
  • Proguard 与 Autovalue

    我刚刚开始使用 AutoValue 但无法使其与 proguard 一起使用 我有大约 6000 多个类似这样的警告 警告 autovalue shaded com google common auto common MoreElement
  • Android GCM PushNotification - 在应用程序中添加添加自定义声音文件

    我成功收到 GCM 推送通知 现在我想添加自定义声音文件而不是默认声音 我尝试过Uri from 文件 res raw pop mp3 in 通知 DEFAULT SOUND 但没有成功 如果您有更好的解决方案请分享 My GCMInten
  • Android Volley NetworkDispatcher

    我的应用程序从网络服务加载大量数据 并且我正在使用 volley 库来处理网络请求 Volley 正在堆叠 NetworkDispatcher 对象并最终导致应用程序崩溃 我用DDMS堆转储进行了测试 http spragucm wordp
  • 如何在android中将字符`\in`替换为新行

    我有一个 API 请求的服务器响应 如下所示 Success Your request has been sent n nWe ll inform you once it is done 我需要在 Snackbar 中显示此消息 我需要添加
  • PhoneStateListener 中的拨出呼叫检测

    我想检测 Android 应用程序中的拨出电话 实际上我可以检测拨出电话 但它也适用于拨入电话 但我不希望这样 我需要它仅用于传出 这是我的代码 boolean ringing false boolean offhook false pub
  • 重启设备后,频繁发送短信就是开机时多发一次短信

    我经常发送短信 在重新启动设备时再次发送短信 同时我们也 打开 之后 它发送短信的时间间隔是正确的 但是当我们打开设备时 它会再次发送短信 public class BootCompletedIntentReceiver extends B
  • 将 timeout() 与 retryWhen() 结合起来

    我正在创建一个简单的应用程序 用于使用 RxAndroidBle 库连接蓝牙设备 干杯 大家干得好 我遇到的情况是 有时当我连接到设备时 我会收到状态为 133 的 Gatt 错误 我知道这可能会发生 所以我想做的就是在发生错误时重试所有操
  • 如何在调试中查看活动堆栈?

    我遇到一个问题 我的一项活动在之后弹出I think我完成了 有没有办法查看活动的堆栈 1 You can use Hierarchy Viewer within Eclipse You can see all connected devi
  • Oreo 8.0 -“sendTextMessage()”未将消息保存到已发送文件夹

    我尝试使用 sendTextMessage 或 sendMultipartTextMessage 从我自己的应用程序发送短信 对于高于 API 19 KitKat 的手机 此消息将保存到已发送文件夹中 然而 在我的 Android 8 0
  • 在android中绘制单点触摸运动路径

    我正在尝试制作一个绘图应用程序 我想要绘制单点触摸运动路径在 android 中 就像 Swype 键盘的方式一样 因此我想存储每个像素的 x y 坐标将运动路径转化为数据结构 我如何使用 MotionEvent 指针来执行此操作 您可能不
  • 如何让 Meteor Cordova 应用程序允许访问域

    我刚刚做了流星更新 现在有版本 流星1 0 4 科尔多瓦4 2 0 我最近还使用 mup deploy 将我的服务器移动到数字海洋 我现在发现 虽然桌面和移动网站运行良好 但在 Android 移动应用程序中 图像不再加载 这些图像是公共
  • 使用 jsoup 收集倒计时器并为 android 设置计时器

    我想解析 eBay 上的倒计时器 span class 5g 20h span 如何用 jsoup 解析它以在 android studio 上创建倒计时器 我可以像平常一样解析它吗element 像下面这样 更新 getMsFromStr
  • 在 Eclipse 中打开 Android XML 布局的快捷方式

    例如 如果我有类似的东西 setContentView R layout activity main 有没有快捷方式可以打开activity main xml 如果没有 有没有办法创建一个 Its there Just hold Ctrl
  • 如果没有连接 USB 电缆,ADB over TCP/IP 无法工作

    我可以使用 USB 电缆通过 ADB 连接到我的智能手机 我还可以通过 tcp ip 连接到同一智能手机 adb connect 192 168 1 110 同时 USB 电缆仍处于连接状态 但是 一旦我断开电缆 我就会松开 tcp ip
  • 待定意图的多个实例

    我创建了一个小部件 单击该小部件会激活 PendingIntent 问题是 当我屏幕上有多个小部件时 只有最新的小部件才会启动 PendingIntent 我读过一些关于独特请求代码的内容 但没有弄清楚这一点 有什么想法可以让多个小部件和
  • 如何在知道其十进制值的情况下找出菜单中项目的字符串 ID?

    我正在使用 android support v7 appcompat 在一个活动中 我想在操作栏中显示后退按钮 我愿意 public class News extends ActionBarActivity Override protect
  • 使用硬件键盘时 Android TabHost 选项卡会窃取焦点

    我目前有一个TabHost包含 4 个选项卡 在一些片段上我们有一些EditText布局内的视图 我们注意到 当您尝试输入任何内容时EditText使用硬件键盘的视图 焦点被窃取EditText并赋予当前活动选项卡TabHost 这只发生在
  • Kotlin 协程的现有 3 函数回调

    我有一个带有具体示例的一般性问题 我想在拍照时使用 Kotlin 协程魔法而不是 Android 中的回调地狱 manager openCamera cameraId object CameraDevice StateCallback ov
  • 使用数据绑定后查看边距不起作用

    下面是gridview的item布局的代码 在此 layout margin 位于设计面板中 但当我运行时没有边距 我尝试检查其他标签 例如背景 发现它有效 类似的问题是线性布局的布局权重 它们也不起作用 这些在没有数据绑定的情况下工作得很

随机推荐