在我的应用程序中有超过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");
}
}
}
答案 0 :(得分:1)
不要将AsyncTask保留在活动中;只是将它保存在普通的Java类中,不要试图将数据保存在该类的实例中;将您的信息存储在其他地方:单例类,共享首选项或sqlite数据库等。