Java 无法在具有动态数据的RecyclerView中显示项目

Java 无法在具有动态数据的RecyclerView中显示项目,java,android,json,android-recyclerview,adapter,Java,Android,Json,Android Recyclerview,Adapter,我试图显示从服务器获取的一些数据,但无法在recyclerView中显示获取的数据。数据是有效的,解析(JSON解析)工作正常,但我的活动仅显示一个白色屏幕。 当我使用一些虚拟数据运行应用程序时,当我试图设置从服务器解析的数据时,问题就出现了。 这是我的主课 public class JSONDataViewer extends AppCompatActivity { Context context; // private List<Movie> movieL

我试图显示从服务器获取的一些数据,但无法在
recyclerView
中显示获取的数据。数据是有效的,解析(JSON解析)工作正常,但我的活动仅显示一个白色屏幕。 当我使用一些虚拟数据运行应用程序时,当我试图设置从服务器解析的数据时,问题就出现了。 这是我的主课

public class JSONDataViewer extends AppCompatActivity {

    Context context;
    //    private List<Movie> movieList
    private RecyclerView mRecyclerView;
    private CustomAdapter mAdapter;
    private List<MyData> dataList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jsondata_viewer);
        this.context = this;
        AndroidNetworking.initialize(getApplicationContext());

        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);
//        mRecyclerView.setHasFixedSize(true);

//        loadDummyData();
        loadData();
        Log.e("DataListPopulated", "Data list populated");
        mAdapter = new CustomAdapter(dataList);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        mRecyclerView.setLayoutManager(mLayoutManager);
        mRecyclerView.setItemAnimator(new DefaultItemAnimator());
        Log.e("SettingAdapter", "Setting Adapter");
        mRecyclerView.setAdapter(mAdapter);
        Log.e("AdapterSet", "Adapter Set Success");
    }

    private void loadDummyData() {

        String question = "Question ";
        int qNo = 1;
        for (int i = 0; i < 10; i++) {
            qNo++;
            MyData data = new MyData("" + qNo, question + qNo);
            Log.e("Question" + " " + qNo,
                    "\nQuestion id = " + data.getQuestionId() +
                            " Question text = " + data.getQuestionText());
            dataList.add(data);

        }
    }

    private void loadData() {
        AndroidNetworking.post("http://www.skafs.com/survey/api/index.php")
                .addBodyParameter("tag", "getquestion")
                .addBodyParameter("category_id", "2")
                .setPriority(Priority.MEDIUM)
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        Log.i("LoadingData", "" + "Successful" + response);
                        Toast.makeText(context, "Response:\n" + "Loading Data" + response,
                                Toast.LENGTH_LONG).show();
                        boolean success = response.optBoolean("success");
                        if (success) {
                            Log.e("InsideSuccess", "Success = " + success);
                            try {
                                JSONArray questions =
                                        response.optJSONArray("questions");
                                Log.e("Questions", questions.toString());
                                for (int i = 0; i < questions.length(); i++) {
                                    JSONObject obj = questions.getJSONObject(i);
                                    MyData data = new MyData(
                                            obj.getString("question_id"),
                                            obj.getString("question_text"));
                                    Log.e("Question" + " " + i,
                                            "\nQuestion id = " + data.getQuestionId() +
                                                    " Question text = " + data.getQuestionText());
                                    dataList.add(data);
                                }
                                Log.e("ListData", "List Size is = "+dataList.size());
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }

                    @Override
                    public void onError(ANError anError) {
                        anError.printStackTrace();
                        Log.e("ParsingJSON", "" + "Failed getting json");
                    }
                });
    }
}
请给我指出我做错事情的方向

我没有得到任何例外。这是我的
CustomAdapter

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyViewHolder> {

    private List<MyData> dataList;

    public CustomAdapter(List<MyData> dataList) {
        this.dataList = dataList;
        Log.e("Constructor", "Working");
        Log.e("Constructor", "DataList Size = " + dataList.size());
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.card_lay, parent, false);
        Log.e("LayoutInflated", "Working");

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        Log.e("OnBIndMethod", "OnBind Working");
        MyData data = dataList.get(position);
        holder.questionId.setText(data.getQuestionId());
        holder.questionText.setText(data.getQuestionText());
    }

    @Override
    public int getItemCount() {
        return dataList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {

        public TextView questionId, questionText;

        public MyViewHolder(View itemView) {
            super(itemView);
            questionId = (TextView) itemView.findViewById(R.id.question_id);
            questionText = (TextView) itemView.findViewById(R.id.question_text);
            Log.e("FindViewById", "Working");
        }
    }
}
公共类CustomAdapter扩展了RecyclerView.Adapter{ 私有列表数据列表; 公共CustomAdapter(列表数据列表){ this.dataList=dataList; Log.e(“建造商”、“工作”); Log.e(“构造函数”、“数据列表大小=“+DataList.Size()); } @凌驾 公共MyViewHolder onCreateViewHolder(视图组父级,int-viewType){ View itemView=LayoutInflater.from(parent.getContext()) .充气(R.layout.card_lay,父级,假); Log.e(“平放”、“工作”); 返回新的MyViewHolder(itemView); } @凌驾 公共无效onBindViewHolder(MyViewHolder,int位置){ Log.e(“OnBind方法”、“OnBind工作”); MyData data=dataList.get(位置); holder.questionId.setText(data.getQuestionId()); holder.questionText.setText(data.getQuestionText()); } @凌驾 public int getItemCount(){ 返回dataList.size(); } 公共类MyViewHolder扩展了RecyclerView.ViewHolder{ 公共文本查看问题ID,问题文本; 公共MyViewHolder(查看项目视图){ 超级(项目视图); questionId=(TextView)itemView.findViewById(R.id.question\u id); questionText=(TextView)itemView.findViewById(R.id.question\u text); Log.e(“findviewbyd”,“Working”); } } }
MyData
类有两个字符串类型的字段及其getter/setter方法。

for(int i=0;ifor (int i = 0; i < questions.length(); i++) {
                                JSONObject obj = questions.getJSONObject(i);
                                MyData data = new MyData(
                                        obj.getString("question_id"),
                                        obj.getString("question_text"));
                                Log.e("Question" + " " + i,
                                        "\nQuestion id = " + data.getQuestionId() +
                                                " Question text = " + data.getQuestionText());
                                dataList.add(data);
                            }
// notify data set change call missing
mAdapter.notifyDataSetChanged();
JSONObject obj=questions.getJSONObject(i); MyData数据=新的MyData( obj.getString(“问题id”), obj.getString(“问题文本”); Log.e(“问题”+”+i, “\n查询id=“+data.getQuestionId()+ “问题文本=“+data.getQuestionText()); dataList.add(数据); } //通知数据集更改调用丢失 mAdapter.notifyDataSetChanged();
for(int i=0;i
或任何适当的通知方法@谢谢你救了我一天。好奇的是,如果我们加载虚拟值,乳清回收器视图没有这个方法能工作吗?只是一个小小的转储错误让我的日子很难过。oh@InzimamTariqIT“只是好奇的乳清回收器,没有这种方法,它是可以工作的”-不,它不会工作。您应该为dataList提供大于零的大小(列表中的所有项目都将显示),或者对列表执行任何添加、删除、更新操作,并调用“notifyDataSetChanged”方法来反映数据items@Sush嗯,我想知道它是在我的情况下找到的。除了我的
loadDummyData(),我什么也没做工作正常,无需在上述代码中调用数据更改。或任何适当的通知方法@谢谢你救了我一天。好奇的是,如果我们加载虚拟值,乳清回收器视图没有这个方法能工作吗?只是一个小小的转储错误让我的日子很难过。oh@InzimamTariqIT“只是好奇的乳清回收器,没有这种方法,它是可以工作的”-不,它不会工作。您应该为dataList提供大于零的大小(列表中的所有项目都将显示),或者对列表执行任何添加、删除、更新操作,并调用“notifyDataSetChanged”方法来反映数据items@Sush嗯,我想知道它是在我的情况下找到的。除了我的
loadDummyData(),我什么也没做工作正常,无需在上述代码中调用数据更改。
for (int i = 0; i < questions.length(); i++) {
                                JSONObject obj = questions.getJSONObject(i);
                                MyData data = new MyData(
                                        obj.getString("question_id"),
                                        obj.getString("question_text"));
                                Log.e("Question" + " " + i,
                                        "\nQuestion id = " + data.getQuestionId() +
                                                " Question text = " + data.getQuestionText());
                                dataList.add(data);
                            }
// notify data set change call missing
mAdapter.notifyDataSetChanged();