简体   繁体   English

如何转换JSON数组以在RecyclerView中使用

[英]How to convert JSON array to use in RecyclerView

I have a news API JSON link which I want to convert to string array so that I can use them in recycled view. 我有一个新闻API JSON链接,我想将其转换为字符串数组,以便可以在回收视图中使用它们。

I am a new to Java, kindly help me to know the way to do it. 我是Java的新手,请帮助我了解这样做的方法。

I am trying to use Android Networking Library and GSON for this purpose. 我正在尝试为此目的使用Android Networking Library和GSON。

package in.apptonic.lalit.newsapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONArrayRequestListener;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import org.json.JSONArray;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import in.apptonic.lalit.newsapplication.model.News;

public class MainActivity extends AppCompatActivity {

    RecyclerView recyclerView;
    RecyclerView.LayoutManager layoutManager;
    RecyclerView.Adapter adapter;
    List<News> newsList = new ArrayList<>();
    private Gson gson;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        GsonBuilder gsonbuilder = new GsonBuilder();
        gsonbuilder.setDateFormat("M/d/yy hh:mm a");
        gson = gsonbuilder.create();

        AndroidNetworking.initialize(getApplicationContext());

        recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
        layoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(layoutManager);
        adapter = new AdapterNews(newsList);
        recyclerView.setAdapter(adapter);
        downloadNews();
    }

    private void downloadNews() {

        AndroidNetworking.get("https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=hidden")
                .build()
                .getAsJSONArray(new JSONArrayRequestListener() {
                    @Override
                    public void onResponse(JSONArray response) {

                        List<News> news = Arrays.asList(gson.fromJson(String.valueOf(response), News[].class));

                        //TODO How to convert JSON values n String so that I can send them in adapter for recycler view
                    }

                    @Override
                    public void onError(ANError anError) {


                    }
                });


    }
}

First create a list: 首先创建一个列表:

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

Then you can add the string values from the JSONArray to the list like this: 然后,您可以将JSONArray中的字符串值添加到列表中,如下所示:

for (int i = 0; i < response.length(); i++) {
    list.add(response.getJSONObject(i).getString("name"));
}

Then pass this list variable to your adapter. 然后将此列表变量传递给您的适配器。

Create a method inside your AdapterNews class something like this 在您的AdapterNews类中创建一个类似这样的方法

public void updateNewsList(List<News> list){
    this.newsList = list;  // newsList is the list which holds news data inside your adapter.
    notifyDataSetChanged();
}

Call this method in onResponse of your network request. 在网络请求的onResponse中调用此方法。

AndroidNetworking.get("https://newsapi.org/v1/articles?source=the-next-web&sortBy=latest&apiKey=hidden")
            .build()
            .getAsJSONArray(new JSONArrayRequestListener() {
                @Override
                public void onResponse(JSONArray response) {

                    List<News> news = Arrays.asList(gson.fromJson(String.valueOf(response), News[].class));
                    adapter.updateNewsList(news);
                }

                @Override
                public void onError(ANError anError) {
                }
            });

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM