#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); } }
Комментариев нет:
Отправить комментарий