Реакция модифицированного метода на повторное использование в другой деятельности

Как я могу получить данные из getDataForId(Integer.toString(1)); вызывая тот же метод getDataForId из класса DisplayData?

Я хочу использовать тот же метод и получить результат. Нет смысла копировать и вставлять один и тот же метод в другой класс действий. Тогда один и тот же код будет повторен дважды.

Это мой DisplayData.class

  public class DisplayData extends AppCompatActivity {

    Detail reqDetail;
    String BASE_URL = "";
    TextView name;

    ImageView image;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.display_data);

        name = (TextView) findViewById(R.id.name);

        image = (ImageView)findViewById(R.id.image);



        public void getDataForId(final String id) {

        ApiInterface apiInterface = APIClient.getApiInterface();
        Call<MyResponse> call = apiInterface.getResponse();
        call.enqueue(new Callback<MyResponse>() {

        @Override
        public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {

               if (response.body() != null) {
                MyResponse myResponse = response.body();
                    List<Detail> details = myResponse.getDetails();
                        for (Detail d : details) {
                            if (d.getId().equals(id)) {
                                reqDetail = d;
                                    name.setText(reqDetail.getName());

                                            Picasso.with(DisplayData.this)
                                            .load(reqDetail.getName())
                                            .placeholder(R.mipmap.ic_launcher)
                                            .error(R.mipmap.ic_launcher)
                                            .into(image);
                                            }
                                        }

                                    }
                                }

            @Override
            public void onFailure(Call<MyResponse> call, Throwable t) {

            }
        });
    }

Это мой класс SecondData, в котором я хочу отобразить тот же ответ с данными DisplayData, повторно используя те же методы

public class SecondData extends AppCompatActivity {

    Detail reqDetail;
    String BASE_URL = "";
    TextView name;

    ImageView image;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second_main);

        name = (TextView) findViewById(R.id.name);

        image = (ImageView)findViewById(R.id.image);



    }


}

3 ответа

Решение

Создайте класс, чтобы сделать вызов для такой модификации

public class SampleClass {
private DataInterface mListener;

public SampleClass() {
    super();
}

public void getDataForId(final String id) {
    ApiInterface apiInterface = APIClient.getApiInterface();
    Call<MyResponse> call = apiInterface.getResponse();
    call.enqueue(new Callback<MyResponse>() {
        @Override
        public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
            if (response!=null && response.body() != null && mListener != null) {
                mListener.responseData(response.body());
            }
        }
        @Override
        public void onFailure(Call<MyResponse> call, Throwable t) {

        }
    });
}

public void setOnDataListener(DataInterface listener) {
    mListener = listener;
}

public interface DataInterface {
    void responseData( MyResponse myResponse );
}
}

И в своей деятельности просто называйте класс, как это

SampleClass sampleClass = new SampleClass();
sampleClass.setOnDataListener(new SampleClass.DataInterface() {
    @Override
    public void responseData(MyResponse myResponse) {

    }
 });
sampleClass.getDataForId("UR ID");

Также в вашем классе храните идентификатор как личную переменную memeber

private Integer YOUR_ID;

Затем при получении результата сравните идентификатор результата с этим идентификатором.

  List<Detail> details = myResponse.getDetails();
    for (Detail d : details) {
        if (d.getId().equals(YOUR_ID)) {
            reqDetail = d;
            name.setText(reqDetail.getName());

            Picasso.with(DisplayData.this)
                    .load(reqDetail.getName())
                    .placeholder(R.mipmap.ic_launcher)
                    .error(R.mipmap.ic_launcher)
                    .into(image);
          }
    }

Итак, если вы хотите использовать ответ одного действия на другое действие,

Затем сначала сохраните ответ в List или ArrayList.

А затем передать данные с помощью Intent,

Это должно сделать трюк.

Вы должны создать BaseActivity и расширить две другие из него. Затем вы помещаете метод, который вы хотите использовать в обоих из них, в BaseActivity и делаете его общедоступным, чтобы вы могли использовать его правильно.

Обратите внимание, что все, что вам нужно в вашем методе извне, не будет доступно в BaseActivity, поэтому вы должны либо передать конструктор, либо объявить его в BaseActivity, если это возможно.

Вам также следует подумать о том, каким должен быть возврат вашего метода, чтобы вы имели доступ к его результатам.

Вы можете обратиться к этому вопросу, чтобы узнать больше:

стараюсь не повторяться (андроид / ява)

Другие вопросы по тегам