#java #android #классы
Есть MainActivity и класс API. При запуске activity отправляется запрос к серверу. После отправки запроса нужно вернуть результат в функцию onRequestEnd в MainActivity. В API при инициализации класса отдается класс и контекст MainActivity. Как можно вызвать onRequestEnd() из API, учитывая то, что к API можно будет обращаться так же из разных activity и всегда возвращать результат в onRequestEnd()? public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); API API = new API(MainActivity.class, MainActivity.this); API.request("getStartData"); } public void onRequestEnd(String result) { showToast("request end"); } void showToast(final String text) { runOnUiThread(new Runnable() { public void run() { Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show(); } }); } } public class API { private static Context context = null; private static Class callbackClass = null; public API(Class cls, Context cntxt){ context = cntxt; callbackClass = cls; } public void request(String method) { new Request().execute(method); } public class Request extends AsyncTask{ @Override protected String doInBackground(String... params) { //запрос к api } @Override protected void onPostExecute(String result) { super.onPostExecute(result); // вызов MainActivity.onRequestEnd } } }
Ответы
Ответ 1
public interface Callback { void onRequestEnd(String result); } public class MainActivity extends AppCompatActivity implements Callback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); API api = new API(this); api.setCallback(this); api.request("getStartData"); } @Override public void onRequestEnd(String result) { showToast("request end"); } ... } public class API { private static Callback callback; public void setCallback(Callback callback){ this.callback = callback; } @Override protected void onPostExecute(String result) { callback.onRequestEnd(result); } }
Комментариев нет:
Отправить комментарий