老师,能帮我看看为什么这里拿不到这个手机应用信息的集合呢?

老师,能帮我看看为什么这里拿不到这个手机应用信息的集合呢?

protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   
   listView = (ListView)findViewById(R.id.list_view);

   IntentFilter filter = new IntentFilter();
   filter.addAction("com.App_information");
   registerReceiver(new BroadcastReceiver() {
       @Override
       public void onReceive(Context context, Intent intent) {
           List<ApplicationInfo> result = intent.getParcelableArrayListExtra("App_info");
           Myapplication app = (Myapplication)getApplication();
           app.setApplist(result);
       }
   }, filter);
   Myapplication app = (Myapplication)getApplication();
   listView.setAdapter(new AppAdapter(app.getApplist(), MainActivity.this));
}

系统提示说setAdapter里面的app.getApplist()是空的,怎么才能将onReceive里的这个集合拿到外边使用啊,我用了applicaiton的全局属性也不行!

正在回答 回答被采纳积分+1

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

1回答
irista23 2018-05-25 10:49:54

你的代码中可以把result设置成成员变量,这样就不需要Myapplication去缓存数据集合了,在当前acitivity中操作的都是这个result集合,另外在onReceive()中对intent的action加个判断,只有等于"com.App_information"这个action才可以去取数据,另外,就是检查是否在自定义Application类的onCreate()方法中startService(Intent intent)

  • 提问者 Jeremy936399 #1
    我把result设定成成员变量了,但是在onReceive函数外面我用log打印了一下result这个集合的size,系统显示错误,说对象是空的,我现在就非常纳闷,我试了很多种方法,都是这样,不知道如何才能讲onReceive函数中获得的这个集合变成全局的,然后供以后使用!
    2018-05-25 11:32:36
  • irista23 回复 提问者 Jeremy936399 #2
    你首先保证数据能够从serive发送广播传到广播接收器里,在Acitvity的onCreate()方法里的result如果为null,只要加个判断不让他异常就可以,等数据在广播接收器里接收到了,你设置数据刷新UI就显示出来了。在筛选的响应事件中数据这时就有值可操作了。
    2018-05-25 12:16:31
  • 提问者 Jeremy936399 回复 irista23 #3
    哦哦,原来这个集合的值是暂时空的啊,原来如此,谢谢老师的耐心讲解
    2018-05-25 12:19:05
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
Android数据通信开发与应用2018版
  • 参与学习           人
  • 提交作业       147    份
  • 解答问题       687    个

本专题介绍了Android开发核心组件:广播、服务及全局应用。教会你如何使用AIDL、Thread、Socket、蓝牙解决进程线程间通信问题。利用Glide等实现异步加载及NDK原生代码开发。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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