【问题标题】:Asynctask in service , onPostExecute errorAsynctask 在服务中,onPostExecute 错误
【发布时间】:2016-09-17 22:35:39
【问题描述】:
Error : NullPointerException 
        can't get data in onPostExecute();

我在服务的onStartCommand() 中创建了一个 AsyncTask;
启动服务后:
1. LoadDataFromNetwork.getData运行在doInBackground,这个方法会从网络获取数据,可以工作,我可以看到Log;

2 。我无法在onPostExcute();中获取数据
为什么?
我是一个新人,有人可以帮助我吗?谢谢高级!!!

3 .错误图片

4 。代码:

enter code here  public class Service_LoadAndStoreData extends Service {
@Override
public void onCreate() {
    super.onCreate();
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Log.d(Application.TAG , "service start");
    new AsyncTask<Void ,Void ,List<ChannelBeans>>(){
        @Override
        protected List<ChannelBeans> doInBackground(Void... params) {
            return LoadDataFromNetwork.getData();//it can be work
        }

        @Override
        protected void onPostExecute(List<ChannelBeans> channelBeanses) {
            super.onPostExecute(channelBeanses);
            Log.d(Application.TAG , channelBeanses.toString()); //Error :NullPointerException;
        }
    }.execute();

    return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent intent) {
    return null;
}
}

【问题讨论】:

  • 您的 getData() 正在返回一个空列表。你能告诉我们对应于那个任务的代码吗?

标签: android service android-asynctask nullpointerexception


【解决方案1】:

我认为问题出在 LoadDataFromNetwork 类的 getData() 方法上。 你能展示 getData() 方法吗?你用那个方法初始化你的 List 了吗?

【讨论】:

  • 我无法在您的回答中添加评论,因为我还没有足够的声誉。
  • 我想在服务中完成两项任务
  • 1.从网络中获取数据 2.将数据放入SQLite 我该怎么办?
  • 公共静态列表 getData () { Wilddog wilddog = new Wilddog(url); wilddog.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { map = (Map) dataSnapshot.getValue(); mDataList = getJsonDateFromMap(map); Log.d(Application.TAG , "load_completed" +mDataList.toString()); }
【解决方案2】:
enter code here public static List<ChannelBeans> getData () {
    Wilddog wilddog = new Wilddog(url);
    wilddog.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            map = (Map<String, Object>) dataSnapshot.getValue();
            mDataList = getJsonDateFromMap(map);
            Log.d(Application.TAG , "load_completed" +mDataList.toString());
        }

        @Override
        public void onCancelled(WilddogError wilddogError) {
            Log.d(Application.TAG , "Request Error");
        }
    });
    return mDataList;
}

【讨论】:

  • 尽管此代码可能会回答问题,但提供有关它为什么和/或如何回答问题的额外上下文将显着提高其长期价值。请编辑您的答案以添加一些解释。
  • 我得到了解决方案:onDataChange()是一个监听器,返回mDataList不能在AsyncTask中获取数据,我改了代码,在onDataChange中getJsonDataFromMap()之后把dataList放到SQLite中,可以了,谢谢你们!
猜你喜欢
  • 1970-01-01
  • 2017-07-23
  • 2012-06-15
  • 1970-01-01
  • 2023-03-25
  • 2018-03-30
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多