简体   繁体   English

我面临 RecyclerView 没有附加适配器的问题,即使在将适配器设置为布局管理器之后也是如此。 我一个

[英]I am facing an issue with RecyclerView no adapter attached, even after setting adapter an layout manager. I a

I want to fetch data from json file from the internet using url, After doing all the codes RecyclerView says no adapter attached.我想使用 url 从互联网上的 json 文件中获取数据,完成所有代码后 RecyclerView 说没有附加适配器。 I am not able to find out what is wrong with my code.我无法找出我的代码有什么问题。

public class MainActivity extends AppCompatActivity {公共 class MainActivity 扩展 AppCompatActivity {

private String urlData = "https://vast-shore-74260.herokuapp.com/banks?city=MUMBAI";
private RecyclerView recyclerView;
private RecyclerView.Adapter Radapter;
private List<ListItem> listItems;

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

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));


   //Using this listitem in recyclerView works just fine but when i try to to parse json file, RecyclerView says no adapter attached.
    /*listItems = new ArrayList<>();

    for (int i=0;i<=10;i++)
    {
        ListItem listItem = new ListItem(
          "SBI"+(i+1),
          "Lorem ipsum",
          "SBIN00009945",
          "khanapara",
          "9945",
          "ghy",
          "kamrup",
          "assam"


        );
        listItems.add(listItem);
    }

    Radapter = new MyAdapter(listItems,this);
    recyclerView.setAdapter(Radapter);*/

    Spinner dropdown = findViewById(R.id.spinner);
    String[] items = new String[]{"Select City","Mumbai","Bangalore","Chennai"};
    ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,items)
    {
        @Override
        public boolean isEnabled(int position)
        {
            if (position == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent)
        {
            View view = super.getDropDownView(position,convertView,parent);
            TextView txtView = (TextView)view;
            if (position == 0)
            {
                txtView.setTextColor(Color.GRAY);
            }
            else
            {
                txtView.setTextColor(Color.BLACK);
        }
            return view;
        }
    };

    dropdown.setAdapter(adapter);


    listItems = new ArrayList<>();

    loadRecyclerViewData();


}

private void loadRecyclerViewData()
{
    final ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Loading Data...");
    progressDialog.show();

    StringRequest stringRequest = new StringRequest(
            Request.Method.GET,
            urlData,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {

                    progressDialog.dismiss();

                    try {
                        JSONObject jsonObject = new JSONObject(s);
                        JSONArray array = jsonObject.getJSONArray(urlData);

                        for (int i=0; i<array.length();i++)
                        {
                            JSONObject o = array.getJSONObject(i);
                            ListItem item = new ListItem(
                                    o.getString("bank_name"),
                                    o.getString("address"),
                                    o.getString("ifsc"),
                                    o.getString("branch"),
                                    o.getInt("bank_id"),
                                    o.getString("city"),
                                    o.getString("district"),
                                    o.getString("state")

                            );
                            listItems.add(item);

                        }
                        /*Radapter = new MyAdapter(listItems,getApplicationContext());
                        recyclerView.setAdapter(Radapter);*/


                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
                    Log.e("errorcode",error.getMessage());
                }
            }

    );
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);


}

} }

There might be some problem in this code: Radapter = new MyAdapter(listItems,getApplicationContext());此代码中可能存在一些问题: Radapter = new MyAdapter(listItems,getApplicationContext()); recyclerView.setAdapter(Radapter); recyclerView.setAdapter(雷达);

This is the Adapter class这是适配器 class



public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {



    private List<ListItem> listItems;
    private Context context;

    public MyAdapter(List<ListItem> listItemAdap, Context context) {
        this.listItems = listItemAdap;
        this.context = context;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        ListItem listItem = listItems.get(position);
        holder.txtviewBankName.setText(listItem.getBank_name());
        holder.txtviewAddress.setText(listItem.getAddress());
        holder.txtviewIfsc.setText(listItem.getIfsc());
        holder.txtviewBranch.setText(listItem.getBranch());
        holder.txtviewBankId.setText(listItem.getBank_id());
        holder.txtviewCity.setText(listItem.getCity());
        holder.txtviewDistrict.setText(listItem.getDistrict());
        holder.txtviewState.setText(listItem.getState());

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder
    {
        public TextView txtviewBankName;
        public TextView txtviewAddress;
        public TextView txtviewIfsc;
        public TextView txtviewBranch;
        public TextView txtviewBankId;
        public TextView txtviewCity;
        public TextView txtviewDistrict;
        public TextView txtviewState;

        public ViewHolder(View itemView) {
            super(itemView);

            txtviewBankName = (TextView)itemView.findViewById(R.id.bankName);
            txtviewAddress = (TextView)itemView.findViewById(R.id.address);
            txtviewIfsc = (TextView)itemView.findViewById(R.id.ifsc);
            txtviewBranch = (TextView)itemView.findViewById(R.id.branch);
            txtviewBankId = (TextView)itemView.findViewById(R.id.bankId);
            txtviewCity = (TextView)itemView.findViewById(R.id.city);
            txtviewDistrict = (TextView)itemView.findViewById(R.id.district);
            txtviewState = (TextView)itemView.findViewById(R.id.state);
        }
    }
}

Change your MainActivity like this像这样更改您的 MainActivity

public class MainActivity extends AppCompatActivity {


private String urlData = "https://vast-shore-74260.herokuapp.com/banks?city=MUMBAI";
private RecyclerView recyclerView;
private RecyclerView.Adapter Radapter;
private List<ListItem> listItems;

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

    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    recyclerView.setHasFixedSize(true);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));

    Spinner dropdown = findViewById(R.id.spinner);
    String[] items = new String[]{"Select City","Mumbai","Bangalore","Chennai"};
    ArrayAdapter<String>adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item,items)
    {
        @Override
        public boolean isEnabled(int position)
        {
            if (position == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent)
        {
            View view = super.getDropDownView(position,convertView,parent);
            TextView txtView = (TextView)view;
            if (position == 0)
            {
                txtView.setTextColor(Color.GRAY);
            }
            else
            {
                txtView.setTextColor(Color.BLACK);
        }
            return view;
        }
    };

    dropdown.setAdapter(adapter);


    listItems = new ArrayList<>();

    loadRecyclerViewData();
}

private void loadRecyclerViewData()
{
    final ProgressDialog progressDialog = new ProgressDialog(this);
    progressDialog.setMessage("Loading Data...");
    progressDialog.show();

    StringRequest stringRequest = new StringRequest(
            Request.Method.GET,
            urlData,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String s) {
                    try {
                        JSONObject jsonObject = new JSONObject(s);
                        JSONArray array = jsonObject.getJSONArray(urlData);

                        for (int i=0; i<array.length();i++)
                        {
                            JSONObject o = array.getJSONObject(i);
                            ListItem item = new ListItem(
                                    o.getString("bank_name"),
                                    o.getString("address"),
                                    o.getString("ifsc"),
                                    o.getString("branch"),
                                    o.getInt("bank_id"),
                                    o.getString("city"),
                                    o.getString("district"),
                                    o.getString("state")

                            );
                            listItems.add(item);
                        }
                        Radapter = new MyAdapter(listItems,MainActivity.this);
                        MainActivity.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                progressDialog.dismiss();
                                recyclerView.setAdapter(Radapter);
                            }
                        });
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                    Toast.makeText(getApplicationContext(),error.getMessage(),Toast.LENGTH_LONG).show();
                    Log.e("errorcode",error.getMessage());
                }
            }

    );
    RequestQueue requestQueue = Volley.newRequestQueue(this);
    requestQueue.add(stringRequest);
}
}

Your JSON string has some wrong characters, it should be like this你的 JSON 字符串有一些错误的字符,应该是这样的

[{"ifsc":"ABHY0065001","bank_id":60,"branch":"RTGS-HO","address":"ABHYUDAYA BANK BLDG., B.NO.71, NEHRU NAGAR, KURLA (E), MUMBAI-400024","city":"MUMBAI","district":"GREATER MUMBAI","state":"MAHARASHTRA","bank_name":"ABHYUDAYA COOPERATIVE BANK LIMITED"}]

then for parsing this json you can use the com.google.Gson library like this然后解析这个 json 你可以像这样使用 com.google.Gson 库

Type listType = new TypeToken<ArrayList<ListItem>>() {}.getType();
String s = "[{\"ifsc\":\"ABHY0065001\",\"bank_id\":60,\"branch\":\"RTGS-HO\",\"address\":\"ABHYUDAYA BANK BLDG., B.NO.71, NEHRU NAGAR, KURLA (E), MUMBAI-400024\",\"city\":\"MUMBAI\",\"district\":\"GREATER MUMBAI\",\"state\":\"MAHARASHTRA\",\"bank_name\":\"ABHYUDAYA COOPERATIVE BANK LIMITED\"}]";
List<ListItem> items = new Gson().fromJson(s, listType);

then you can set this list as input into your Adapter then assign your adapter to your recycler.然后您可以将此列表设置为适配器的输入,然后将您的适配器分配给您的回收商。

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

相关问题 即使我初始化了适配器,也没有附加适配器跳过布局 - No adapter attached skipping layout even though I initialized the adapter 如何修复RecyclerView:未连接适配器; 跳过布局? - How do i fix RecyclerView: No adapter attached; skipping layout? 没有附加适配器使用 RecyclerView 适配器跳过布局错误 - No Adapter Attached Skipping layout error with RecyclerView Adapter 未连接适配器; 跳过布局:RecyclerView(带适配器) - No adapter attached; skipping layout : RecyclerView (with adapter) 未连接适配器; 使用RecyclerView跳过布局 - No adapter attached; skipping layout with RecyclerView RecyclerView:没有附加适配器:跳过布局 - RecyclerView: No adapter attached:skipping layout 即使设置了适配器,RecyclerView 也不显示 - RecyclerView not displayed even after setting the adapter 使用 recyclerview 设置适配器时“未连接适配器”即将到来 - While setting adapter with recyclerview “No Adapter Attached” is coming RecyclerView 错误未连接适配器; 跳过布局并设置 OnClickListener - RecyclerView Error No adapter attached ; skipping layout and setting OnClickListener RecyclerView:未连接适配器; 设置onClickListener时跳过布局 - RecyclerView: No adapter attached; skipping layout when setting onClickListener
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM