Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我面临着RecyclerView未连接适配器的问题,即使在将适配器设置为布局管理器之后也是如此。我_Java_Android_Android Recyclerview - Fatal编程技术网

Java 我面临着RecyclerView未连接适配器的问题,即使在将适配器设置为布局管理器之后也是如此。我

Java 我面临着RecyclerView未连接适配器的问题,即使在将适配器设置为布局管理器之后也是如此。我,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想使用url从互联网上的json文件中获取数据,在完成所有代码后,RecyclerView说没有连接适配器。我无法找出我的代码有什么问题 公共类MainActivity扩展了AppCompatActivity{ private String urlData = "https://vast-shore-74260.herokuapp.com/banks?city=MUMBAI"; private RecyclerView recyclerView; private RecyclerView.Ad

我想使用url从互联网上的json文件中获取数据,在完成所有代码后,RecyclerView说没有连接适配器。我无法找出我的代码有什么问题

公共类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);


}
}

此代码中可能存在一些问题: Radapter=新的MyAdapterlistItems,getApplicationContext; recyclerView.SetAdapterAdapter

这是适配器类



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);
        }
    }
}

您的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"}]
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);
然后,为了解析这个json,您可以像这样使用com.google.Gson库

[{"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"}]
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);

然后,您可以将此列表设置为适配器的输入,然后将适配器分配给回收商。

您可能有JsonException。调试onResponseListener并确保执行到达for块的末尾。然后创建一个新的适配器并将其分配给回收器。没有连接适配器是典型的,因为当您在onCreate方法上设置视图时,您还没有设置回收器适配器。您在解析json对象后设置了它的适配器,因此,回收器应该在没有适配器的情况下花费一些时间。因此,我应该如何解决这个问题。你到底指的是什么问题?好的,我试试看