【问题标题】:Layer doesn't show with recycleview层不显示与recycleview
【发布时间】:2018-10-02 04:31:00
【问题描述】:

我正在做一个比特币跟踪器应用程序,所以我可以学习 json 解析的基础知识,但是当我运行应用程序时,我的应用程序层保持空白。这是我的 RecycleViewAdapter:

package Adapters;

import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.view.menu.MenuView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.example.angel.simplecrypto.R;

import java.util.List;

import Models.Currencies;

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

    private Context mContext;
    private List<Currencies> mData;
    RequestOptions option;

    public RecyclerViewAdapter(Context mContext, List<Currencies> mData) {
        this.mContext = mContext;
        this.mData = mData;
        option = new RequestOptions().centerCrop().placeholder(R.drawable.loading_shape).error(R.drawable.loading_shape);


    }

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

        View view;
        LayoutInflater inflater=LayoutInflater.from(mContext);
        view = inflater.inflate(R.layout.currency_row_item, parent,false);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {

        holder.currency_price.setText(mData.get(position).getEur());
        holder.currency_price2.setText(mData.get(position).getUsd());



    }

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

    public static class MyViewHolder extends RecyclerView.ViewHolder{


        TextView currency_price2;
        TextView currency_price;


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


            currency_price2 = itemView.findViewById(R.id.price2);
            currency_price= itemView.findViewById(R.id.price);



        }
    }
}

这是我的 MainActivity:

package Activities;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;
import com.example.angel.simplecrypto.R;

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

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

import Adapters.RecyclerViewAdapter;
import Models.Currencies;

public class MainActivity extends AppCompatActivity {

    private final String JSON_URL = "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=EUR,USD";
    private JsonArrayRequest request;
    private RequestQueue requestQueue;
    private List<Currencies> lstCurrencies;
    private RecyclerView recyclerView;

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

        lstCurrencies = new ArrayList<>();
        recyclerView = findViewById(R.id.recyclerviewid);
        jsonrequest();
    }

    private void jsonrequest() {
        request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {

                JSONObject jsonObject = null;
                for (int i = 0; i < response.length(); i++){

                    try{
                        jsonObject=response.getJSONObject(i);
                        Currencies currencies = new Currencies();
                        currencies.setEur(jsonObject.getString("EUR"));
                        currencies.setUsd(jsonObject.getString("USD"));


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

                }
            setuprecyclerview(lstCurrencies);
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {

            }
        });



    }

    private void setuprecyclerview(List<Currencies> lstCurrencies) {

        RecyclerViewAdapter myadapter = new RecyclerViewAdapter(this, lstCurrencies);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        recyclerView.setAdapter(myadapter);
    }

}

我只想用 2 个项目测试回收查看器,但我不知道为什么什么都没有显示。在我的 activity_main.xml 中,我创建了 recyclerviewer,并且我有一个 单独的 .xml 用于设计该 recycleviewer 中的项目。有任何想法吗?顺便说一句,我收到了这个错误:04-21 18:20:11.707 26586-26586/com.example.angel.simplecrypto E/RecyclerView:没有连接适配器;跳过布局

【问题讨论】:

  • 您并没有真正将新货币添加到lstCurrencies。在您的 try 块中,在 currencies.setUsd(... 之后添加 lstCurrencies.add(currencies)

标签: android json xml recyclerview-layout


【解决方案1】:

我想你忘了lstCurrencies.add(currencies);

【讨论】:

  • 试过了,还是不行:/我已经设置了适配器,但是当我查看logcat时,我得到了这个:RecyclerView:没有连接适配器;跳过布局
【解决方案2】:

您的 json 解析不正确,因此数据不会显示在 recyclerview 中。您的 API 返回 json 对象,您将解析数组。检查您的 API 响应并检查您的 json 解析编码。

【讨论】:

    【解决方案3】:

    你需要在你的jsonrequest()方法中添加这个

    lstCurrencies.add(currencies);

    并在全球范围内定义您的RecyclerViewAdapter 适配器类并在列表视图中添加数据后添加myadapter.notifyDataSetChanged();

    这样试试……

    public class MainActivity extends AppCompatActivity {
    
        private final String JSON_URL = "https://min-api.cryptocompare.com/data/price?fsym=BTC&tsyms=EUR,USD";
        private JsonArrayRequest request;
        private RequestQueue requestQueue;
        private List<Currencies> lstCurrencies;
        private RecyclerView recyclerView;
        RecyclerViewAdapter myadapter;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            lstCurrencies = new ArrayList<>();
            recyclerView = findViewById(R.id.recyclerviewid);
    
            myadapter = new RecyclerViewAdapter(this, lstCurrencies);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
            recyclerView.setAdapter(myadapter); 
    
            jsonrequest();
        }
    
        private void jsonrequest() {
            request = new JsonArrayRequest(JSON_URL, new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
    
                    JSONObject jsonObject = null;
                    for (int i = 0; i < response.length(); i++){
    
                        try{
                            jsonObject=response.getJSONObject(i);
                            Currencies currencies = new Currencies();
                            currencies.setEur(jsonObject.getString("EUR"));
                            currencies.setUsd(jsonObject.getString("USD"));
                            lstCurrencies.add(currencies);
    
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
    
                    }
                adapter.notifyDataSetChanged();
                }
            }, new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
    
                }
            });
    
         RequestQueue queue = Volley.newRequestQueue(this);
         queue.add(request);
    
        } 
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2018-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      相关资源
      最近更新 更多