You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fragment中RecyclerView无法加载JSON数据问题求助

问题:Fragment中RecyclerView无法加载Volley获取的JSON数据

本地构造用户数据时RecyclerView能正常显示,但通过Volley获取并解析JSON数据时,仅显示RecyclerView的空布局,无法加载数据内容。更换多个JSON接口测试仍无法获取数据,怀疑问题出在JSON解析环节。

相关代码

Fragment代码(ListaTrabajadores.java)

public class ListaTrabajadores extends Fragment {
    ArrayList<Usuario> listaFragment;
    RecyclerView recycle;
    private adaptador myadapter;
    private RequestQueue queu;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View vista = inflater.inflate(R.layout.fragment_lista_trabajadores, container, false);
        recycle = vista.findViewById(R.id.recyclerview);
        recycle.setLayoutManager(new LinearLayoutManager(getContext()));
        listaFragment = new ArrayList<>();
        queu = Volley.newRequestQueue(getContext());
        llenarlista();

        return vista;
    }
    private void llenarlista() {
        String url = "https://pixabay.com/api/?key=myApiKey&q=kitten&image_type=photo&pretty=true";
        JsonObjectRequest jsonArrayRequest = new JsonObjectRequest(Request.Method.GET, url,null, new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                    try {
                        JSONArray jsonArray= response.getJSONArray("hits");
                        for (int i = 0; i < jsonArray.length(); i++) {
                            JSONObject object = jsonArray.getJSONObject(i);
                          String imagen=object.getString("pageURL");
                          String  nombre= object.getString("user");
                          String  puesto =object.getString("tags");
                          String apellido = object.getString("user");
                            listaFragment.add(new Usuario(nombre,apellido,puesto,imagen));
                        }
                        myadapter = new adaptador(getContext(), listaFragment);
                        recycle.setAdapter(myadapter);

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }



                }


        }, new Response.ErrorListener() {
                public void onErrorResponse (VolleyError error) {
                    Log.d("tag", "onErrorResponse" + error.getMessage());
                }

        });
        queu.add(jsonArrayRequest);

    }
}

MainActivity代码(MainActivity.java)

public class MainActivity extends AppCompatActivity {
    ArrayList<Usuario> listaActividad;
    RecyclerView recycle;
    ListaTrabajadores fragmentolista = new ListaTrabajadores();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ponerFragmento(fragmentolista);
    }

    private void ponerFragmento(Fragment fragmento){
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.contenedor, fragmento);
        fragmentTransaction.commit();
    }
}

排查与解决建议

  • 替换真实API Key:你使用的Pixabay接口中key=myApiKey是占位符,必须替换为在Pixabay官网申请的真实API Key,否则接口会返回权限错误。
  • 添加网络权限:确保AndroidManifest.xml中已添加网络权限:
    <uses-permission android:name="android.permission.INTERNET"/>
    
    缺少该权限时,Volley无法发起网络请求,自然无法获取数据。
  • 优化异常日志:当前JSONException仅打印栈信息,建议添加Log输出具体错误细节,快速定位问题字段:
    catch (JSONException e) {
        Log.e("JSON_ERROR", "解析失败:" + e.getMessage());
        e.printStackTrace();
    }
    
  • 核对JSON字段拼写:确认Pixabay返回的JSON结构中,pageURL、user、tags等字段拼写完全正确(注意大小写)。
  • 使用安全上下文:将getContext()替换为requireContext(),避免Fragment生命周期中上下文为空的情况,保证Adapter初始化时上下文有效。
  • 调试请求状态:在onResponse和onErrorResponse中添加Log,确认请求是否成功触发回调:
    @Override
    public void onResponse(JSONObject response) {
        Log.d("VOLLEY_SUCCESS", "请求成功,返回数据:" + response.toString());
        // 原有解析代码
    }
    
    如果未输出该Log,说明请求未成功发起或未收到响应。

内容的提问来源于stack exchange,提问作者Rese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 16:35:24