2016-04-06 16 views
1
  1. ABC.class İlk etkinlik Class alınıyor bir Android Etkinliğinizden bir başka Etkinlik AsyncTask Class Call.
  2. XYZ.class, AsyncTask Activity Class'tır.

Uygulamamda 10'dan fazla Async görevi var, bu yüzden Ayrı Sınıftaki Async görevini tuttum.nasıl NPE

Başka Bir Etkinliği Asynctask Sınıfını (XYZ.class) bir Etkinliğin (ABC.class) Çağrısı.

Sorun:

1.I (Azure Yerel Veri Tabanı Veri Alma) zaman uyumsuz Görev ABC.class uzak ama, ben XYZ.class OnCreate Class Bazı Örnek değerlerini tuttu böyle hitap edebilir . Yani Asynctask Başlarken NPE.

2.Oncreate Metodu Çalışmıyor, Bu Async görevi Diğer Etkinlik'ten çağırıyorsa.

3.İnsan doinbackgroud iM NPE Hatası alıyorum.

Bunu nasıl çözeceğime, başka bir çözüm öner.

DÜZENLEME: DB Yerel , bu yüzden ben içeride onCreate tuttu neyi Örneklerini ihtiyaç Azure Sunucusundan Veri getirilirken benim zaman uyumsuz görev IAM ise 1

.

th_tbusergroupmapping benim Veritabanı Adı olduğu zaman uyumsuz Görevi

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

XYZ.class çağrılması ABC.class

/*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

Gereksinim duyduğunuz değerleri AsyncTask yapıcınıza iletebilir ve özel alanları olarak kaydedebilirsiniz. Bu senin için işe yarayacak mı? – Vucko

+0

Değerleri iletemiyorum, Çünkü Sunucudan Veri Alıyor. Mobil hizmetini başlatmalı ve Oncreate’ı içeride anahtarlamalıyım. – Kumar

+0

AsyncTask'ın ana kusuru, Etkinlik yaşam döngüsü için çok zayıf bir şekilde sıkı olmasıdır. Yanlışlıkla kullanıldığında ya da sadece dikkatli bir şekilde bile yeterince dikkatli olmamanız, genellikle NPE hatalarına neden olur. Sizin durumunuzda, AsyncTask örneğini başka bir etkinlikten kullanırsınız, yani dürüst olmak gerekirse oldukça dağınık görünür.Çeşitli aktivitelerde bazı AsyncTask nesnelerini kullanmanız gerekiyorsa, bunu ayrı bir sınıf dosyasında tutmanız, hangi verilere ihtiyaç duyduğunu ve bunun için uygun bir kurucu tasarlamanız gerekir. –

cevap

1

AsyncTask'ı bir etkinlikte tutmayın; sadece sıradan bir Java sınıfında saklayın ve verileri o sınıfın örnekleri içinde tutmaya çalışmayın; Bilgilerinizi başka bir yerde saklayın: tekil bir sınıfta veya paylaferanslarda veya sqlite veritabanında, vb.