Api возвращает результаты в журналах, но не отображается на экране - PullRequest
0 голосов
/ 16 июня 2020

Уважаемое сообщество стека,

У меня есть API, и я создал интерфейс API и клиент Api (с использованием модернизации). Когда я нажимаю поиск по слову (я вижу результаты, которые отображаются в моих журналах, но мой экран остается пустым. Я размещаю свой код ниже, а также снимок экрана с моим экраном и сообщение журнала. Пожалуйста, посмотрите и подскажите, что я могу

MY MainActivity. java is.

public class MainActivity extends AppCompatActivity {
     private ListView listViewNews;
     private NewsListAdapter mAdapter;
     private static  final String API_KEY = "6a6f7c77766442acb20c86157a152131";


    TextView emptytextView;

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

        listViewNews = findViewById(R.id.list);

    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
        SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setSubmitButtonEnabled(true);
        searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String s) {
                String country = getCountry ();
                String languauge = getLanguage();

                ProductService productService = APICLIENT.getClient().create(ProductService.class);

                Call<List<Newsclass>> call;
                if (s.length() > 0) {
                    call = productService.getNewsSearch(s, languauge, "publishedAt", API_KEY);

                } else {
                    call = productService.getNews(country, API_KEY);
                }



                call.enqueue(new Callback() {
                    @Override
                    public void onResponse(Call call, Response response) {
                        List<Newsclass> newsclass =   (List<Newsclass>)response.body();
                        mAdapter = new NewsListAdapter(getApplicationContext(), newsclass);

                        listViewNews.setAdapter(mAdapter);


                    }

                    @Override
                    public void onFailure(Call call, Throwable t) {
                        Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT);

                    }
                });

                return false;
            }

            @Override
            public boolean onQueryTextChange(String s) {
                return false;
            }
        });

        return true;


    }

    public static String getCountry(){
        Locale locale = Locale.getDefault();
        String country = locale.getCountry();
        return country.toLowerCase();
    }

    public static String getLanguage(){
        Locale locale = Locale.getDefault();
        String country = locale.getLanguage();
        return country.toLowerCase();
    }

}

My ApiClient. java

 public class APICLIENT {

    private static Retrofit retrofit = null;

    private static final String SPORTS_API = "https://newsapi.org/v2/";


    public static Retrofit getClient() {


        HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
        OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
        retrofit = new Retrofit.Builder().baseUrl(SPORTS_API).addConverterFactory(GsonConverterFactory.create()).client(client).build();

        return retrofit;

    }
}

My APIINTERFACE. java

public interface ProductService {


/*
    @GET ("search/{keyword}")
    Call<List<Newsclass>> search (@Path("keyword") String keyword);


*/



    @GET("top-headlines")
    Call<List<Newsclass>> getNews(@Query("country") String country , @Query("apiKey") String apiKey

    );

    @GET("everything")
    Call<List<Newsclass>> getNewsSearch(
            @Query("q") String keyword, @Query("language") String language, @Query("sortBy") String sortBy, @Query("apiKey") String apiKey);

}

Мой адаптер.

public class NewsListAdapter extends ArrayAdapter<Newsclass> {

    private Context context;
    private List<Newsclass> newsclass;

    public NewsListAdapter (Context context, List<Newsclass> newsclass) {
        super(context, R.layout.list_item_news, newsclass);
        this.context = context;
        this.newsclass = newsclass;


    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        convertView = layoutInflater.inflate(R.layout.list_item_news, parent, false);

        Newsclass newclasses = newsclass.get(position);

        TextView textViewTitle = convertView.findViewById(R.id.title);
        textViewTitle.setText(newclasses.getTitle());

        TextView textViewDes = convertView.findViewById(R.id.description);
        textViewDes.setText(newclasses.getDescription());


        TextView textSource = convertView.findViewById(R.id.newsSource);
        textSource.setText(newclasses.getSource());


        TextView texttimeView = convertView.findViewById(R.id.date);
        texttimeView.setText(newclasses.getPublishedAt());



        ImageView photosView = convertView.findViewById(R.id.imageView);
        Picasso.get().load(newclasses.getUrlToImage()).centerCrop().fit().into(photosView);

        return convertView;
    }

}

Мой собственный класс.

public class Newsclass implements Serializable {

    @SerializedName("title")
    private String title;

    @SerializedName("source")
    private String source;

    @SerializedName("description")
    private String description;

    @SerializedName("urlToImage")
    private String urlToImage;

    @SerializedName("publishedAt")
    private String publishedAt;

    @SerializedName("url")
    private String url;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getSource() {
        return source;
    }

    public void setSource(String source) {
        this.source = source;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getUrlToImage() {
        return urlToImage;
    }

    public void setUrlToImage(String urlToImage) {
        this.urlToImage = urlToImage;
    }

    public String getPublishedAt() {
        return publishedAt;
    }

    public void setPublishedAt(String publishedAt) {
        this.publishedAt = publishedAt;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}

и вот скриншоты // на моем экране нет результата но в журналах я вижу конкретные c запросы. введите описание изображения здесь

...