1
我有一個帶有電子郵件字段和按鈕的認證接口。 當我點擊按鈕時,AsyncTask應驗證電子郵件是否存在於谷歌應用程序引擎數據存儲中。 這是我的AsyncTask代碼:AsyncTask返回值延遲
public class ConnexionAsyncTask extends AsyncTask<Object, Object, Inscrit> {
private static InscritApi inscritApi = null;
private Context context;
String email;
ProgressDialog dialog;
public ConnexionAsyncTask(Context context, String email) {
this.context = context;
dialog = new ProgressDialog(context);
this.email = email;
}
@Override
protected void onPreExecute() {
dialog.setMessage("Connexion en cours");
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.show();
}
@Override
protected Inscrit doInBackground(Object... params) {
if (inscritApi == null) {
InscritApi.Builder builder = new InscritApi.Builder(AndroidHttp.newCompatibleTransport(), new AndroidJsonFactory(), null)
.setRootUrl(// some url);
inscritApi = builder.build();
}
try {
return inscritApi.get(email).execute();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Inscrit inscrit) {
MainActivity main = (MainActivity) context;
main.setInscrit(inscrit);
dialog.dismiss();
}}
而且這是在MainActivity代碼:
public class MainActivity extends AppCompatActivity {
Inscrit inscrit;
Button btncnx;
EditText emailcnx;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btncnx = (Button) findViewById(R.id.btncnx);
emailcnx = (EditText) findViewById(R.id.emailcnx);
btncnx.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ConnexionAsyncTask task = new ConnexionAsyncTask(MainActivity.this, emailcnx.getText().toString());
task.execute();
if (inscrit == null)
Toast.makeText(MainActivity.this, "not exist", Toast.LENGTH_SHORT).show();
else
Toast.makeText(MainActivity.this, "exist", Toast.LENGTH_SHORT).show();
}
});
}
public void setInscrit(Inscrit inscrit) {
this.inscrit = inscrit;
}}
因此,代碼應該像這樣:
- 在MainActivity應該給「 inscrit「變量連接到ConnexionAsyncTask
- ConnexionAsyncTask應該驗證電子郵件是否存在於數據存儲區中,而不是恩把結果(Inscrit實例或空)在「inscrit」變量與二傳手
- 在MainActivity應覈實是否「inscrit」爲空或不是,並顯示舉杯
,當我運行我的代碼必須點擊兩次以獲得真實結果,例如,如果我放入「[email protected]」,並且當然這封電子郵件存在於數據存儲庫中,它將首次向我顯示「不存在」並存在於第二次,這意味着AsyncTask在驗證之後返回值。 如果我用.execute()。get()返回值,但它會阻止ui線程,並且我想顯示一個進度對話框。 我試過使用回調接口,但它也不起作用。
謝謝你真的有效,我只需要添加我希望它在** AsyncTask **之後執行的方法,並從** onPostExecute ** –