- 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对象,那么您需要将它保存在单独的类文件中,找出它需要的数据并为其设计适当的构造函数。 –