Java 如何将JSON数据添加到RecyclerView

Java 如何将JSON数据添加到RecyclerView,java,android,json,Java,Android,Json,这是我的RecyclerAdapter代码: package com.example.sander.app; import android.app.Fragment; import android.os.Bundle; import android.support.v7.widget.CardView; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerV

这是我的RecyclerAdapter代码:

package com.example.sander.app;

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import java.util.ArrayList;

/**
 * Created by Sander on 6-4-2017.
 */

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyViewHolder> {
    private String[] mDataset;
    ArrayList<String> ArrayDataset;
    public static class MyViewHolder extends RecyclerView.ViewHolder{
        public CardView mCardView;
        public TextView mTextView;
        public MyViewHolder(View v){
            super(v);

            mCardView = (CardView) v.findViewById(R.id.card_view);
            mTextView = (TextView) v.findViewById(R.id.tv_blah);

        }

    }

    public RecycleAdapter(ArrayList<String> names){
        ArrayDataset = names;
    }

    @Override
    public RecycleAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.fragment_card_view, parent, false);
        MyViewHolder vh = new MyViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position){
        holder.mTextView.setText(ArrayDataset.get(position));
    }

    @Override
    public int getItemCount() { return ArrayDataset.size(); }
}
package com.example.sander.app;
导入android.app.Fragment;
导入android.os.Bundle;
导入android.support.v7.widget.CardView;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.TextView;
导入java.util.ArrayList;
/**
*由Sander于2017年6月4日创建。
*/
公共类RecycleAdapter扩展了RecyclerView.Adapter{
私有字符串[]mDataset;
ArrayList ArrayDataset;
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
公共CardView-mCardView;
公共文本视图mTextView;
公共MyViewHolder(视图v){
超级(五);
mCardView=(cardwiew)v.findviewbyd(R.id.card\u视图);
mTextView=(TextView)v.findViewById(R.id.tv_blah);
}
}
公共回收apter(ArrayList名称){
ArrayDataset=名称;
}
@凌驾
public RecycleAdapter.MyViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图v=LayoutInflater.from(parent.getContext()).flate(R.layout.fragment\u card\u视图,parent,false);
MyViewHolder vh=新的MyViewHolder(v);
返回vh;
}
@凌驾
公共无效onBindViewHolder(MyViewHolder,int位置){
holder.mTextView.setText(ArrayDataset.get(position));
}
@凌驾
public int getItemCount(){return ArrayDataset.size();}
}
这是我的回收器片段代码:

package com.example.sander.app;

import android.app.Fragment;
import android.os.Bundle;
import android.support.v7.widget.CardView;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

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

/**
 * Created by Sander on 6-4-2017.
 */

public class RecycleFrame extends Fragment {
    ArrayList<String> names = new ArrayList<>();
    GoogleMaps maps = new GoogleMaps();
    public RecycleFrame() {
        // Required empty public constructor
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        RequestQueue rq = Volley.newRequestQueue(getActivity().getApplicationContext());
        String url= "http://test.dontstealmywag.ga/api/parkgarage.php";
        StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        // Do something with the response
                        try{
                            JSONObject o = new JSONObject(response);
                            JSONArray values=o.getJSONArray("parkgarage");
                            for ( int i=0; i< values.length(); i++) {
                                JSONObject jsonObject = values.getJSONObject(i);
                                names.add(jsonObject.getString("parkgarage_name"));
                            }
                        }  catch (JSONException ex){}
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // Handle error
                    }
                });
        rq.add(stringRequest);

    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View rootView = inflater.inflate(R.layout.fragment_recycle, container, false);
        RecyclerView VRecyclerView = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
        VRecyclerView.setHasFixedSize(true);
        RecycleAdapter adapter = new RecycleAdapter(names);
        VRecyclerView.setAdapter(adapter);

        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        VRecyclerView.setLayoutManager(llm);

        return rootView;
    }
}
package com.example.sander.app;
导入android.app.Fragment;
导入android.os.Bundle;
导入android.support.v7.widget.CardView;
导入android.support.v7.widget.LinearLayoutManager;
导入android.support.v7.widget.RecyclerView;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.FrameLayout;
导入android.widget.TextView;
导入com.android.volley.Request;
导入com.android.volley.RequestQueue;
导入com.android.volley.Response;
导入com.android.volley.VolleyError;
导入com.android.volley.toolbox.StringRequest;
导入com.android.volley.toolbox.volley;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
导入java.util.List;
/**
*由Sander于2017年6月4日创建。
*/
公共类RecycleFrame扩展片段{
ArrayList name=新的ArrayList();
谷歌地图=新谷歌地图();
公共回收名称(){
//必需的空公共构造函数
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
RequestQueue rq=Volley.newRequestQueue(getActivity().getApplicationContext());
字符串url=”http://test.dontstealmywag.ga/api/parkgarage.php";
StringRequest StringRequest=新的StringRequest(Request.Method.GET,url,
新的Response.Listener(){
@凌驾
公共void onResponse(字符串响应){
//对回应做点什么
试一试{
JSONObject o=新的JSONObject(响应);
JSONArray值=o.getJSONArray(“停车场”);
对于(int i=0;i
如果我没说错的话。我的API中的数据(链接可在代码中找到)将添加到名为“
names
”的
ArrayList
中,但当我运行代码时,我的
Recyclerview
为空。如何将JSON数据添加到
RecyclerView
并显示它

(对于记录,如果我使用
String[]{“Example”}
尝试,它将显示一张带有“
Example
”的卡片)


提前感谢

您的请求是异步的,因此您应该在onResponse()中调用setAdapter()。否则,由于片段生命周期的原因,在请求完成之前调用了setAdapter()方法。请将RecycleAdapter(名称)移动到onResponse块。@iravul谢谢!就像你说的那样!