전자 메일 필드와 버튼이있는 인증 인터페이스가 있습니다. 버튼을 클릭하면 AsyncTask가 이메일이 Google 앱 엔진 데이터 저장소에 있는지 확인해야합니다. 이 내 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 인스턴스 또는 null)를 넣어
- MainActivity는 "inscrit는"널 (null)인지 여부를 확인하고 난 내 코드 I을 실행하면 건배
를 표시해야합니다 예를 들어 "[email protected]"을 넣으면 실제 결과를 얻으려면 2 번 클릭해야하며이 이메일은 데이터 저장소에 존재합니다. 처음에는 "존재하지 않음"을 표시하고 두 번째는 존재한다는 것을 의미합니다. AsyncTask는 검증 직후 값을 리턴합니다. .execute(). get()을 사용하여 값을 반환하는 경우 작동하지만 UI 스레드를 차단하고 진행률 대화 상자를 표시하려고합니다. 콜백 인터페이스를 사용하려고했지만 작동하지 않습니다.
정말 고마워요. 그냥 ** AsyncTask ** 후에 메서드를 호출하고 ** onPostExecute **에서 호출하도록 추가해야합니다. –