- ABC.class第一個活動類。
- 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");
}
}
}
您可以將所需的值傳遞給AsyncTask的構造函數,並將它們保存爲其專用字段。這對你有用嗎? – Vucko
我可以不傳遞值,因爲它從服務器獲取數據。我應該啓動移動服務和密鑰內Oncreate。 – Kumar
AsyncTask的主要缺陷是它對Activity的生命週期非常緊密。使用它錯誤或根本不夠小心,甚至只有活動往往導致NPE錯誤。在你的情況下,你可以從另一個Activity使用AsyncTask實例,說實話,看起來很混亂。如果您需要在各種活動中使用一些AsyncTask對象,那麼您需要將它保存在單獨的類文件中,找出它需要的數據併爲其設計適當的構造函數。 –