Android 解析多个JSON Url
我正在尝试解析我的应用程序中的多个JSON URl,并在一个列表视图中显示它们 但我唯一能做的就是显示一个URl,我想在一个列表视图中显示多个URl,并且URl具有相同的数组名称和属性 这是我的密码Android 解析多个JSON Url,android,json,api,android-asynctask,Android,Json,Api,Android Asynctask,我正在尝试解析我的应用程序中的多个JSON URl,并在一个列表视图中显示它们 但我唯一能做的就是显示一个URl,我想在一个列表视图中显示多个URl,并且URl具有相同的数组名称和属性 这是我的密码 @Override public void onStart() { super.onStart(); if(connectiondetector.isConnected()){ new jsontask().execute( "h
@Override
public void onStart() {
super.onStart();
if(connectiondetector.isConnected()){
new jsontask().execute(
"https://newsapi.org/v1/articles?source=google-news&sortBy=top&apiKey=ade8f00a634b4825a028837ec107afae"
);
}else {
Toast.makeText(page.this, "no internet connection",Toast.LENGTH_SHORT).show();
}
// ATTENTION: This was auto-generated to implement the App Indexing API.
// See https://g.co/AppIndexing/AndroidStudio for more information.
}
@Override
public void onStop() {
super.onStop();
}
public class jsontask extends AsyncTask<String, String, List<moviemodel>> {
@Override
protected List<moviemodel> doInBackground(String... params) {
BufferedReader reader = null;
HttpURLConnection connection = null;
try {
URL url = new URL(params[0]);
connection = (HttpURLConnection) url.openConnection();
connection.connect();
InputStream stream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer buffer = new StringBuffer();
String line = "";
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String finaljson = buffer.toString();
JSONObject parentobject = new JSONObject(finaljson);
// JSONObject parentobject1 = parentobject.getJSONObject("");
JSONArray parentarray = parentobject.getJSONArray("articles");
List<moviemodel>moviemodelList = new ArrayList<>();
for (int i = 0; i < parentarray.length(); i++){
JSONObject finalobject = parentarray.getJSONObject(i);
moviemodel moviemodel = new moviemodel();
moviemodel.setAuthor(finalobject.getString("author"));
moviemodel.setDescription(finalobject.getString("description"));
moviemodel.setTitle(finalobject.getString("title"));
moviemodel.setImage(finalobject.getString("urlToImage"));
moviemodel.setUrl(finalobject.getString("url"));
moviemodel.setPublishedAt(finalobject.getString("publishedAt"));
moviemodelList.add(moviemodel);
}
return moviemodelList;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(List<moviemodel> result) {
super.onPostExecute(result);
newsadapter adapter = new newsadapter(getApplicationContext(),R.layout.row, result);
lvnews.setAdapter(adapter);
lvnews.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
{
if(flag_loading == false)
{
flag_loading = true;
new jsontask().execute("https://newsapi.org/v1/articles?source=ars-technica&sortBy=top&apiKey=ade8f00a634b4825a028837ec107afae")
;}
}
}
});
}
}
@覆盖
public void onStart(){
super.onStart();
if(connectiondetector.isConnected()){
新建jsontask().execute(
"https://newsapi.org/v1/articles?source=google-新闻和分类=top&apiKey=ade8f00a634b4825a028837ec107afae”
);
}否则{
Toast.makeText(page.this,“无互联网连接”,Toast.LENGTH_SHORT.show();
}
//注意:这是自动生成的,用于实现应用程序索引API。
//看https://g.co/AppIndexing/AndroidStudio 了解更多信息。
}
@凌驾
公共void onStop(){
super.onStop();
}
公共类jsontask扩展了异步任务{
@凌驾
受保护列表doInBackground(字符串…参数){
BufferedReader reader=null;
HttpURLConnection=null;
试一试{
URL=新URL(参数[0]);
connection=(HttpURLConnection)url.openConnection();
connection.connect();
InputStream=connection.getInputStream();
reader=新的BufferedReader(新的InputStreamReader(流));
StringBuffer=新的StringBuffer();
字符串行=”;
而((line=reader.readLine())!=null){
buffer.append(行);
}
字符串finaljson=buffer.toString();
JSONObject parentobject=新的JSONObject(finaljson);
//JSONObject parentobject1=parentobject.getJSONObject(“”);
JSONArray parentarray=parentobject.getJSONArray(“文章”);
ListmoviemodelList=新的ArrayList();
对于(int i=0;i
您只需声明您的ListmoviemodelList=new ArrayList()代码>从asynctask中删除,并在两个asynctask中使用相同的列表。如果在asynctask中使用声明列表,它将重新初始化,并且从列表中清除从第一个asynctask存储的以前的数据
只需声明列表,在其中声明create方法上方的所有变量