如何从Android活动中调用另一个活动AsyncTask类获取NPE

时间:2016-04-06 13:03:58

标签: android azure android-activity android-asynctask

  1. ABC.class 第一个活动类。
  2. XYZ.class 是AsyncTask活动类。
  3. 在我的应用程序中有超过10个异步任务,所以我在异步类中保持异步任务。

    我从一个Activity(ABC.class)调用另一个活动Asynctask类(XYZ.class)。

    问题:

    1.我可以从 ABC.class 调用异步任务,但是,我在 XYZ.class 类的 OnCreate 中保留了一些实例值(获取Azure本地数据库数据)。 所以Asynctask获得NPE。

    2.Oncreate方法未运行,当Async任务正在调用From Other Activity时。

    3.Inside doinbackgroud iam得到NPE错误。

    帮我解决这个问题,否则建议我解决这个问题。

    编辑:1

    在我的异步任务Iam从 Azure服务器获取数据到本地数据库,所以我需要实例我保留的内容 Oncreate

    ABC.class

    调用异步任务

     AsyncTaskload_UserGroupMappingTableClass myClass = new AsyncTaskload_UserGroupMappingTableClass(getApplicationContext());
                                                    myClass.execute();
    

    XYZ.class

    th_tbusergroupmapping是我的数据库名称

     /*CLient for Table5 */
        private static MobileServiceClient mClient_UserGroupMapping;
    
        //ONLINE CLIENT  AZURE
        public  static MobileServiceTable<th_tbusergroupmapping> mToDoTable_UserGroupMapping_ServerAzure;
    
        //Offline CLient FOr  LOCAL Datbase.
    
        public static MobileServiceSyncTable<th_tbusergroupmapping> mToDoTable_UserGroupMapping_Local_Database;
    
    
         @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                try {
                    // Create the Mobile Service Client instance, using the provided
    
                    // Mobile Service URL and key
                    mClient_UserGroupMapping = new MobileServiceClient(
                            "***********",
                            "**************",
                            this).withFilter(new ProgressFilter());
    
    
        /*UserGroupMapping*/
                    // Get the Mobile Service Table instance to use
                    mToDoTable_UserGroupMapping_ServerAzure = mClient_UserGroupMapping.getTable(th_tbusergroupmapping.class);
    
                    // LOCAL DATABASE TABLE Instance to use
                    mToDoTable_UserGroupMapping_Local_Database= mClient_UserGroupMapping.getSyncTable("th_tbusergroupmapping", th_tbusergroupmapping.class);
    
    
                    //Init local storage
                    initLocalStore().get();
    
    
                }
                catch (MalformedURLException e)
                {
    
                    Log.i("Oncreate", "There was an error creating the Mobile Service. Verify the URL......!");
    
                } catch (Exception e) {
    
                    Log.i("Oncreate", "Exception Occur......!");
                }
    
            }
    
    
         public static class AsyncTaskload_UserGroupMappingTableClass extends AsyncTask<Void, String, Void>
            {
    
                private Context context;
                public AsyncTaskload_UserGroupMappingTableClass(Context context) {
                    this.context = context;
                }
    
                @Override
                protected void onPreExecute()
                {
                    super.onPreExecute();
    
                }
                @Override
                protected Void doInBackground(Void... params)
                {
                }
         @Override
                protected void onPostExecute(Void result)
                {
    
                    try
                    {
    
                        Log.i("DONE ", "Data Sync Done Successfully UserGroupMapping 1");
    
    
                    } catch (Exception e)
                    {
                        e.printStackTrace();
    
                        Log.i("Exception ", "Post Excecute");
                    }
                }
    
            }
    

1 个答案:

答案 0 :(得分:1)

不要将AsyncTask保留在活动中;只是将它保存在普通的Java类中,不要试图将数据保存在该类的实例中;将您的信息存储在其他地方:单例类,共享首选项或sqlite数据库等。