Слой не отображается с recycleview

specbk спросил: 28 марта 2018 в 04:38 в: android

Я делаю приложение для отслеживания биткойнов, поэтому я могу изучить основы 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);
    }}

Я просто хотел протестировать средство просмотра перезаписи только с двумя элементами, но у меня нет подсказки, почему ничего не появляется. В моем activity_main.xml я сделал recyclerviewer, и у меня есть отдельный .xml для дизайна элементов в этом recycleviewer. Есть идеи? И btw я получил эту ошибку: 04-21 18: 20: 11.707 26586-26586 / com.example.angel.simplecrypto E / RecyclerView: адаптер не подключен; пропуская макет

3 ответа

manhtuan21 ответил: 28 марта 2018 в 04:46

Я думаю, вы забыли lstCurrencies.add(currencies);

specbk ответил: 28 марта 2018 в 04:51
Пробовал, все еще не работает: / Я установил адаптер, но когда я смотрю в logcat, я получаю следующее: RecyclerView: Адаптер не подключен; пропускающий макет
Ansh Kareliya ответил: 28 марта 2018 в 05:00

Ваш анализ json неверен, так что данные не отображаются в recyclerview. Ваш API возвращает объект json, и вы будете анализировать массив. Проверьте свой ответ API и проверьте кодировку синтаксического анализа json.

vikas singh ответил: 28 марта 2018 в 05:18

вам нужно добавить это в свой метод jsonrequest()

lstCurrencies.add(currencies);

и определить свой адаптер RecyclerViewAdapter класс globaly и добавьте 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);    } }