それで、最近出会ったことについて、やや一般的な質問があります。Activity と Task の 2 つのクラスがあるとします。Activity では、新しい Task オブジェクトがインスタンス化されますが、通常のパラメーターが与えられる代わりに、後でいくつかの新しいコードが括弧内に導入され、そのインスタンス化でそのメソッドの 1 つが呼び出されます。オブジェクトが作成されるとすぐにメソッドが呼び出されるのを見てきましたが、その動作も再定義されていません。これはすべて Android ベースなので、それに関連しているのかもしれませんが、この構文的に奇妙なものは、Android が導入したものというよりも Java の概念のように思えます。クラスファイルは次のとおりです。
class Task extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... args) {
try {
//do things here
} catch (Exception ex) {
ex.printStackTrace();
Log.e("Exception", ex.toString());
}
return Text;
}
}
これは作成されるオブジェクトであり、それをインスタンス化するコードは次のとおりです。
new Task() {
@Override
public void onPostExecute(String result) {
Log.d("JSON", result);
try {
if (jObject.has("error")) {
//Do something here
}
else if (!paymentCheck(appDomain)){
//do something else
}
else {
//Do last thing
}
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
}.execute(appDomain, email, password);
AsyncTask は、doInBackground メソッドからの結果を別のスレッドの onPostExecute メソッドに渡すという点で風変わりなクラスであることを理解しています。おそらくそれがこれが行われる理由ですが、Tasks で onPostExecute を定義しない理由がよくわかりません。他の例で見たように、独自のクラスファイル。また、このことは完全に正常にコンパイルおよび実行され、想定されているすべてのことを実行します。私は背後にある理由を本当に理解していません。うまくいけば、ここの誰かが助けてくれるでしょう!ありがとう