2016-04-06 75 views
1
  1. ABC.class第一個活動類。
  2. XYZ.class是AsyncTask活動類。

在我的應用程序中有超過10個異步任務,所以我在分離的類中保持異步任務。如何從Android活動調用另一個活動AsyncTask類獲取NPE

我正在從活動(ABC.class)調用另一個活動Asynctask類(XYZ.class)。

問題:

1.I那個叫異步任務從ABC.class但是,我保留了一些實例值內OnCreate中XYZ.class類(獲取Azure的本地數據庫中的數據) 。 因此Asynctask獲得NPE。

2.Oncreate方法未運行,當該異步任務正在調用From Other Activity時。

3.內部doinbackgroud iam獲得NPE錯誤。

幫助我如何解決這個,否則建議我任何其他解決方案。

編輯:1

在我的異步任務蔭從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"); 
       } 
      } 

     } 
+0

您可以將所需的值傳遞給AsyncTask的構造函數,並將它們保存爲其專用字段。這對你有用嗎? – Vucko

+0

我可以不傳遞值,因爲它從服務器獲取數據。我應該啓動移動服務和密鑰內Oncreate。 – Kumar

+0

AsyncTask的主要缺陷是它對Activity的生命週期非常緊密。使用它錯誤或根本不夠小心,甚至只有活動往往導致NPE錯誤。在你的情況下,你可以從另一個Activity使用AsyncTask實例,說實話,看起來很混亂。如果您需要在各種活動中使用一些AsyncTask對象,那麼您需要將它保存在單獨的類文件中,找出它需要的數據併爲其設計適當的構造函數。 –

回答

1

然後,不要將AsyncTask保留在一個活動中;只要將它保存在一個普通的Java類中,不要試圖將數據保存在該類的實例中;將信息存儲在其他地方:單例類,共享首選項或sqlite數據庫等。

相關問題