程序奔溃问题

正在回答

登陆购买课程后可参与讨论,去登陆

11回答

http://img1.sycdn.imooc.com//climg/5aa772740001719505420386.jpg

这里没有改过来丫,我的意思是红框的都去掉

  • 慕UI6705487 提问者 #1
    非常感谢!
    2018-03-13 18:58:18
提问者 慕UI6705487 2018-03-13 14:23:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package com.hala.view01;
 
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by air on 2018/3/6.
 */
 
public class LocalData {
 
    /**
     * 获取列表组的数据
     * @return
     */
    public static List<String> getGroupData(){
        List<String> groups=new ArrayList<String>();
        groups.add("权利的游戏第一季");
        groups.add("权利的游戏第二季");
        return groups;
    }
 
    /**
     * 获取子条目的数据
     * @return
     */
    public static List<List<String>> getChildData(){
        List<List<String>> childs= new ArrayList<List<String>>() {
            @Override
            public int size() {
                return 0;
            }
 
            @Override
            public List<String> get(int index) {
                return null;
            }
        };
 
        List<String> item1=new ArrayList<String>();
        item1.add("龙的诞生");
        item1.add("耐得史塔克之死");
        childs.add(item1);
 
        List<String> item2=new ArrayList<String>();
        item1.add("红袍女的出现");
        item1.add("少狼主起兵");
        item2.add("弑君者被抓");
 
        childs.add(item2);
        return childs;
    }
}


提问者 慕UI6705487 2018-03-12 20:15:30
  • 适配器看没什么问题,你把getChildData()方法和getGroupData()代码贴出来
    2018-03-13 09:38:20
  • 提问者 慕UI6705487 回复 irista23 #2
    在上边了老师
    2018-03-13 14:22:48
提问者 慕UI6705487 2018-03-12 16:47:36

http://img1.sycdn.imooc.com//climg/5aa63e960001867113070262.jpg

空指针报错

提问者 慕UI6705487 2018-03-12 16:46:19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.hala.view01;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
 
import java.util.List;
 
/** 基础适配器
 * Created by air on 2018/3/6.
 */
 
public abstract class MyBaseAdapter<T> extends BaseExpandableListAdapter {
 
    private List<String> groups;
    private List<List<T>> childs;
    Context mcontext;
    LayoutInflater mlayoutInflater;
 
    public MyBaseAdapter(Context context){
        mcontext=context;
        mlayoutInflater=LayoutInflater.from(mcontext);
 
    }
 
 
    public void addNewData(List<String> groups,List<List<T>> childs){
        this.groups=groups;
        this.childs=childs;
 
    }
 
 
    /**
     * 获取组的数量
     * @return
     */
    @Override
    public int getGroupCount() {
        return groups.size();
    }
 
    /**
     * 获取组的id
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }
 
    /**
     * 获取组的视图
     * @param groupPosition 组的位置
     * @param isExpanded 组是否是展开的
     * @param convertView 视图
     * @param parent 环境
     * @return
     */
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        return MyGroupView(groupPosition,convertView);
    }
 
    /**
     * 获取组的具体内容
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public String getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }
 
    /**
     * 获取组的子条目数量
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public int getChildrenCount(int groupPosition) {
        return childs.get(groupPosition).size();
    }
 
    /**
     * 获取具体子条目的内容
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @return
     */
    @Override
    public T getChild(int groupPosition, int childPosition) {
        return childs.get(groupPosition).get(childPosition);
    }
 
 
    /**
     * 获取子条目的位置
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @return
     */
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }
 
    /**
     * 获取子条目的视图
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @param isLastChild 是否是最后一个子条目
     * @param convertView 视图
     * @param parent 环境
     * @return
     */
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        return MyChildView(groupPosition,childPosition,convertView);
    }
 
    public abstract View MyGroupView(int groupPosition,View groupview);
    public abstract View MyChildView(int groupPosition,int childPosition,View childview);
 
    @Override
    public boolean hasStableIds() {
        return false;
    }
 
 
    /**
     * 子条目是否可以被点击
     * @param groupPosition
     * @param childPosition
     * @return
     */
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}

MyBaseAdapter类,添加了范型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.hala.view01;
 
import android.content.Context;
import android.view.View;
import android.widget.TextView;
 
/** 本地数据适配器
 * Created by air on 2018/3/6.
 */
 
public class LocalAdapter extends MyBaseAdapter {
 
    public LocalAdapter(Context context) {
        super(context);
    }
 
    @Override
    public View MyGroupView(int groupPosition, View groupview) {
        View view=mlayoutInflater.inflate(R.layout.item_elv_group,null);
        TextView txttTitle=(TextView) view.findViewById(R.id.txt_group);
        txttTitle.setText(getGroup(groupPosition));
        txttTitle.setPadding(30,0,0,0);
        //设置内边距,据左边为30dp
        return view;
    }
 
    @Override
    public View MyChildView(int groupPosition, int childPosition, View childview) {
        View view=mlayoutInflater.inflate(R.layout.item_elv_child,null);
//        TextView txtContent=(TextView)view.findViewById(R.id.txt_child);
//        txtContent.setText(getChild(groupPosition,childPosition));
//        txtContent.setPadding(30,0,0,0);
        return view;
    }
}

LocalAdapter类,将最后三行注释掉了

  • txtContent.setText(getChild(groupPosition,childPosition));这句把参数使用.toString()转成String
    2018-03-12 17:16:30
  • 提问者 慕UI6705487 回复 irista23 #2
    老师,还是一样的错误呀,见上边回复报错
    2018-03-12 20:14:25
提问者 慕UI6705487 2018-03-09 19:12:32
1
2
3
4
5
6
7
8
9
10
/**
 * 获取具体子条目的内容
 * @param groupPosition 组的位置
 * @param childPosition 子条目在组中的位置
 * @return
 */
@Override
public String getChild(int groupPosition, int childPosition) {
    return childs.get(groupPosition).get(childPosition);
}

MyBaseAdapter类中的问题代码段

http://img1.sycdn.imooc.com//climg/5aa26c0e00012ee413330262.jpg

报错内容

  • 提问者 慕UI6705487 #1
    错了错了,问题代码段是下边这个 /** * 获取组的子条目数量 * @param groupPosition 组的位置 * @return */ @Override public int getChildrenCount(int groupPosition) { return childs.get(groupPosition).size(); }
    2018-03-09 19:13:57
irista23 2018-03-09 13:36:56

http://img1.sycdn.imooc.com//climg/5aa21d650001f7a905470399.jpg

改成List<List<String>> childs = new ArrayList<List<String>>();

  • 提问者 慕UI6705487 #1
    谢谢老师这个问题解决了,但我点击第一级按钮没有出现下拉菜单,而是崩溃啦,报错是空指针异常(见上边回复,还有问题代码段),我又看了一遍视频,和视频代码是一样的,不知哪里的问题
    2018-03-09 19:11:22
  • irista23 回复 提问者 慕UI6705487 #2
    你参照源码把MyBaseAdapter加上范型,因为它是基类,加上范型扩展性更大,对应的childs改成List<List<T>> 类型,getChild()返回T类型。
    2018-03-11 09:26:42
  • 提问者 慕UI6705487 回复 irista23 #3
    老师,改了之后,还有一个空指针异常,见上边最新回复
    2018-03-12 16:44:11
提问者 慕UI6705487 2018-03-08 21:39:50

LocalAdapter类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package com.hala.view01;
 
import android.content.Context;
import android.view.View;
import android.widget.TextView;
 
/** 本地数据适配器
 * Created by air on 2018/3/6.
 */
 
public class LocalAdapter extends MyBaseAdapter {
 
    public LocalAdapter(Context context) {
        super(context);
    }
 
    @Override
    public View MyGroupView(int groupPosition, View groupview) {
        View view=mlayoutInflater.inflate(R.layout.item_elv_group,null);
        TextView txttTitle=(TextView) view.findViewById(R.id.txt_group);
        txttTitle.setText(getGroup(groupPosition));
        txttTitle.setPadding(30,0,0,0);
        //设置内边距,据左边为30dp
        return view;
    }
 
    @Override
    public View MyChildView(int groupPosition, int childPosition, View childview) {
        View view=mlayoutInflater.inflate(R.layout.item_elv_child,null);
        TextView txtContent=(TextView)view.findViewById(R.id.txt_child);
        txtContent.setText(getChild(groupPosition,childPosition));
        txtContent.setPadding(30,0,0,0);
        return view;
    }
}

主页面java文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package com.hala.view01;
 
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.Toast;
 
public class Main2Activity extends AppCompatActivity {
 
    private ExpandableListView expandableListView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
 
        expandableListView=(ExpandableListView)findViewById(R.id.elv);
        loadLocal();
 
        expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            /**
             *组的点击事件
             * @param parent 即expandableListView
             * @param v 即Groupview
             * @param groupPosition 组的位置
             * @param id
             * @return
             */
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                Toast.makeText(Main2Activity.this"你点击的是:"+LocalData.getGroupData().get(groupPosition), Toast.LENGTH_SHORT).show();
                return false;
            }
        });
 
        expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            /**
             * 子条目的点击事件
             * @param parent 即expandableListView
             * @param v 即Groupview
             * @param groupPosition 组的位置
             * @param childPosition 子条目的位置
             * @param id
             * @return
             */
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                Toast.makeText(Main2Activity.this"你点击的是:"+LocalData.getChildData().get(childPosition), Toast.LENGTH_SHORT).show();
                return false;
            }
        });
    }
 
    //加载本地数据
    public void loadLocal(){
        LocalAdapter adapter=new LocalAdapter(this);
        //添加数据
        adapter.addNewData(LocalData.getGroupData(),LocalData.getChildData());
        expandableListView.setAdapter(adapter);
    }
}


  • 你把groups.add("权利的游戏第二季");这行代码注释掉
    2018-03-09 10:03:04
  • 提问者 慕UI6705487 回复 irista23 #2
    还是一样的结果
    2018-03-09 11:41:24
提问者 慕UI6705487 2018-03-08 21:38:10

LocalData类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package com.hala.view01;
 
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Created by air on 2018/3/6.
 */
 
public class LocalData {
 
    /**
     * 获取列表组的数据
     * @return
     */
    public static List<String> getGroupData(){
        List<String> groups=new ArrayList<String>();
        groups.add("权利的游戏第一季");
        groups.add("权利的游戏第二季");
        return groups;
    }
 
    /**
     * 获取子条目的数据
     * @return
     */
    public static List<List<String>> getChildData(){
        List<List<String>> childs= new AbstractList<List<String>>() {
            @Override
            public int size() {
                return 0;
            }
 
            @Override
            public List<String> get(int index) {
                return null;
            }
        };
 
        List<String> item1=new ArrayList<String>();
        item1.add("龙的诞生");
        item1.add("耐得史塔克之死");
        childs.add(item1);
 
        List<String> item2=new ArrayList<String>();
        item1.add("红袍女的出现");
        item1.add("少狼主起兵");
        item2.add("弑君者被抓");
 
        childs.add(item2);
        return childs;
    }
}

MyBaseAdapter类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package com.hala.view01;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
 
import java.util.List;
 
/** 基础适配器
 * Created by air on 2018/3/6.
 */
 
public abstract class MyBaseAdapter extends BaseExpandableListAdapter {
 
    private List<String> groups;
    private List<List<String>> childs;
    Context mcontext;
    LayoutInflater mlayoutInflater;
 
    public MyBaseAdapter(Context context){
        mcontext=context;
        mlayoutInflater=LayoutInflater.from(mcontext);
 
    }
 
 
    public void addNewData(List<String> groups,List<List<String>> childs){
        this.groups=groups;
        this.childs=childs;
 
    }
 
 
    /**
     * 获取组的数量
     * @return
     */
    @Override
    public int getGroupCount() {
        return groups.size();
    }
 
    /**
     * 获取组的id
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public long getGroupId(int groupPosition) {
        return 0;
    }
 
    /**
     * 获取组的视图
     * @param groupPosition 组的位置
     * @param isExpanded 组是否是展开的
     * @param convertView 视图
     * @param parent 环境
     * @return
     */
    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        return MyGroupView(groupPosition,convertView);
    }
 
    /**
     * 获取组的具体内容
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public String getGroup(int groupPosition) {
        return groups.get(groupPosition);
    }
 
    /**
     * 获取组的子条目数量
     * @param groupPosition 组的位置
     * @return
     */
    @Override
    public int getChildrenCount(int groupPosition) {
        return childs.get(groupPosition).size();
    }
 
    /**
     * 获取具体子条目的内容
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @return
     */
    @Override
    public String getChild(int groupPosition, int childPosition) {
        return childs.get(groupPosition).get(childPosition);
    }
 
 
    /**
     * 获取子条目的位置
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @return
     */
    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return 0;
    }
 
    /**
     * 获取子条目的视图
     * @param groupPosition 组的位置
     * @param childPosition 子条目在组中的位置
     * @param isLastChild 是否是最后一个子条目
     * @param convertView 视图
     * @param parent 环境
     * @return
     */
    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        return MyChildView(groupPosition,childPosition,convertView);
    }
 
    public abstract View MyGroupView(int groupPosition,View groupview);
    public abstract View MyChildView(int groupPosition,int childPosition,View childview);
 
    @Override
    public boolean hasStableIds() {
        return false;
    }
 
 
    /**
     * 子条目是否可以被点击
     * @param groupPosition
     * @param childPosition
     * @return
     */
    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }
}


irista23 2018-03-08 09:24:56

你报的这个错误提示是容器的操作不被允许,你代码中用到ArrayList等容器集合了吗?断点跟踪一下集合操作的代码,如果还是没有发现问题,把相关代码贴出来,方便我们帮你找到问题解决。

  • 提问者 慕UI6705487 #1
    老师请看一下上边回复的代码,还是没找出来
    2018-03-08 21:40:44
Tender10 2018-03-07 11:06:13

你是导入的课程源码嘛,还是自己新建的工程。

  • 提问者 慕UI6705487 #1
    自己写的工程
    2018-03-07 16:19:41
  • Tender10 回复 提问者 慕UI6705487 #2
    这个是你刚创建工程运行就报错,还是写了自己的有关代码之后报错的。如果新建了Activity,检查一下是否在Manifest文件中进行了注册。
    2018-03-07 16:25:46
  • 提问者 慕UI6705487 回复 Tender10 #3
    注册了,如果没有注册它会显示前一个activity的界面,现在一进去就会崩溃
    2018-03-07 21:54:17
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码