Как получить данные из list <sting> как в глобальной переменной, чтобы получить данные в методе oncreate ()?

PostData.java

public class PostData {

 List<String> gobalAr=new ArrayList<String>();

public List<String> getList(){
    return gobalAr;
}

public void setList( List<String> gl){
    this.gobalAr = gl;
}

String url = "http://btownmedia.com/";
ArrayList<Post> postArry = new ArrayList();
public List<String> bankin = new ArrayList<String>();



public  void getRetrofitPostHospitalObject() {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RetrofitObjectAPI service = retrofit.create(RetrofitObjectAPI.class);

    Call<PostArtical> call = service.getPostHospitalDetails();

    call.enqueue(new Callback<PostArtical>() {
        @Override
        public void onResponse(Response<PostArtical> response, Retrofit retrofit) {

            try {

                List<Post> PostData = response.body().getPosts();

                for (int i = 0; i < PostData.size(); i++) {

                    Post p = new Post();
                    p.setId(PostData.get(i).getId());
                    p.setTitle(PostData.get(i).getTitle());
                    p.setExcerpt(PostData.get(i).getExcerpt());
                    p.setThumbnail(PostData.get(i).getThumbnail());

                    postArry.add(p);
                }
                gobalAr=new ArrayList<String>();
                for (int i = 0; i < postArry.size(); i++) {
                    Post c = new Post();
                    c=postArry.get(i);
                    gobalAr.add(c.getTitle());
                }
                setList(gobalAr);
                Log.d("valuein",gobalAr.toString()); //[Birtamode Eye Hospital (P) Ltd., Birta City Hospital, Life Line Hospital]


            } catch (Exception e) {
                Log.d("onResponse", "There is an error");
                e.printStackTrace();
            }

        }

        @Override
        public void onFailure(Throwable t) {
            Log.d("onFailure", t.toString());
        }
    });

    Log.d("valueout",gobalAr.toString());  // null
}}

MainActivity.java

 public class MainActivity extends AppCompatActivity {

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

    PostData postData = new PostData();
    postData.getRetrofitPostHospitalObject();
    List<String> list = postData.getList();
    Log.d("On", list.toString()); //null

    }}

Когда я пытаюсь получить доступ к данным, которые из класса PostData метода getRetrofitPostHospitalObject () переменной «List gobalAr» в Основная деятельность, когда я вызываю, он показывает значение нулевой в gobalAr, где, как я вставляю данные из gobalArr, в которых ДобавитьgetRetrofitPostHospitalObject () может помочь. .

На самом деле я хочу получить доступ к переменной данных gobalAr класса PostData в MainActivity.

Лучше сделать getter для вашего списка в классе PostData.

Piyush 26.10.2018 08:06

удалите эту строку «Post c = new Post ();», потому что после того, как вы снова добавили данные, вы инициализируете. поэтому он будет нулевым или в postArry.size () для цикла вы можете написать так: «Post c = new Post ();»

pratik vekariya 26.10.2018 08:18

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

Jins Lukose 26.10.2018 08:26
4
3
174
2

Ответы 2

создать метод get () для List, например

public List<String> getList(){
    return *****; 
  } 

Простое решение: вызовите этот метод в MainActivity

public  void getRetrofitPostHospitalObject() {

Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(url)
        .addConverterFactory(GsonConverterFactory.create())
        .build();

RetrofitObjectAPI service = retrofit.create(RetrofitObjectAPI.class);

Call<PostArtical> call = service.getPostHospitalDetails();

call.enqueue(new Callback<PostArtical>() {
    @Override
    public void onResponse(Response<PostArtical> response, Retrofit retrofit) {

        try {

            List<Post> PostData = response.body().getPosts();

            for (int i = 0; i < PostData.size(); i++) {

                Post p = new Post();
                p.setId(PostData.get(i).getId());
                p.setTitle(PostData.get(i).getTitle());
                p.setExcerpt(PostData.get(i).getExcerpt());
                p.setThumbnail(PostData.get(i).getThumbnail());

                postArry.add(p);
            }
            gobalAr=new ArrayList<String>();
            for (int i = 0; i < postArry.size(); i++) {
                Post c = new Post();
                c=postArry.get(i);
                gobalAr.add(c.getTitle());
            }
            setList(gobalAr);
            Log.d("valuein",gobalAr.toString()); //[Birtamode Eye Hospital (P) Ltd., Birta City Hospital, Life Line Hospital]


        } catch (Exception e) {
            Log.d("onResponse", "There is an error");
            e.printStackTrace();
        }

    }

    @Override
    public void onFailure(Throwable t) {
        Log.d("onFailure", t.toString());
    }
});

Log.d("valueout",gobalAr.toString());  // null
}

Затем сделайте остальное внутри. задача решена

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