Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Вызов функции из класса по ссылке на класс

#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); } }

Комментариев нет:

Отправить комментарий