Уважаемое сообщество стека,
У меня есть 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 запросы. введите описание изображения здесь