- ABC.class最初のアクティビティクラス。
- XYZ.classは、AsyncTaskアクティビティクラスです。
私のアプリケーションで10以上の非同期タスクがあるので、私は非同期タスクを別クラスに保ちました。他のアクティビティを呼び出す方法AndroidアクティビティからAsyncTaskクラスを取得するNPEを取得する
私はアクティビティ(ABC.class)から別のアクティビティAsynctaskクラス(XYZ.class)を呼び出しています。
問題:
1.IはABC.classからその非同期タスクを呼び出すことができますが、私はXYZ.classクラス(Azureのローカルデータベースのデータの取得)のOnCreateの内のいくつかのインスタンスの値を保ちました。 Asynctask NPEを取得しています。
2.非同期タスクが他のアクティビティから呼び出しているときに、2.Oncreateメソッドが実行されていません。
3.Inside doinbackgroudがNPEエラーを受け取っています。
これを解決する方法を教えてください、そうでなければ私に他の解決策を提案してください。
EDIT: DBローカルに、そう私は内部のonCreateまま何のインスタンスを必要とするAzureのサーバーからデータをフェッチ私の非同期タスクはIAMで1
。
th_tbusergroupmappingは私のデータベース名である非同期タスク
AsyncTaskload_UserGroupMappingTableClass myClass = new AsyncTaskload_UserGroupMappingTableClass(getApplicationContext());
myClass.execute();
XYZ.classを呼び出す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");
}
}
}
必要な値をAsyncTaskのコンストラクタに渡してプライベートフィールドとして保存できます。それはあなたのために働くだろうか? – Vucko
サーバーからデータを取得しているため、値を渡すことはできません。私はOncreate内でモバイルサービスとキーを開始する必要があります。 – Kumar
AsyncTaskの主な欠陥は、アクティビティのライフサイクルが非常に厳しくないことです。それを間違って使うだけでも、慎重に行かなくても、NPEエラーが発生することがよくあります。あなたのケースでは、AsyncTaskインスタンスを別のアクティビティから使用しています。これは、正直言って、かなり面倒です。AsyncTaskオブジェクトをさまざまなアクティビティで使用する必要がある場合は、別のクラスファイルに保存し、必要なデータを探し出し、適切なコンストラクタを設計する必要があります。 –