Unicas Ответов: 1

Ошибка: "адаптер не может быть применен к (package_name, java.utill.list<package_name>)" В android studio java


Я знаю, что могут быть некоторые подобные вопросы, но это совершенно отличается от них. У меня есть проект android studio, в котором у меня есть RecyclerView с CardView. Когда я определяю адаптер в MainActivity.java, это дает мне ошибку:
Адаптер не может быть применен к (package_name, java.utill.Список<package_name>)

Вот основной код деятельности:
package com.example.app;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.recyclerview.widget.LinearLayoutManager;
    import androidx.recyclerview.widget.RecyclerView;
    
    import android.os.Bundle;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.ArrayList;
    import java.util.List;
    
    public class className extends AppCompatActivity {
    
        RecyclerView viewer;
        package_adapter adapter;
        List<item> itemList = new ArrayList <> ();
        @Override
        protected void onCreate( Bundle savedInstanceState ) {
            super.onCreate (savedInstanceState);
            setContentView (R.layout.layout);
            viewer = findViewById (R.id.viewer);
            viewer.setHasFixedSize (true);
            viewer.setLayoutManager (new LinearLayoutManager(this));
    
            itemLoader ();
        }
        public void itemLoader(){
            String data = "";
            String name = "";
            String creator = "";
            int likes;
            try {
    
                URL url = new URL("https://www.unicas-official.com/questions.json");
                HttpURLConnection htc = (HttpURLConnection) url.openConnection();
                InputStream inputStream = htc.getInputStream();
                BufferedReader br = new BufferedReader(new InputStreamReader (inputStream));
                String raw = "";
                while (raw != null){
                    raw = br.readLine();
                    data = data+raw;
                }
                JSONArray jsonArray = new JSONArray (data);
    
                JSONObject jsonObject=jsonArray.getJSONObject (0);
                name=name + jsonObject.get ("name");
                creator=creator + jsonObject.get ("creator");
                likes= Integer.parseInt (jsonObject.get ("likes").toString ());
                itemList.add (
                        new item (
                                "https://notin",
                                name,
                                creator,
                                likes
                        )
                );
                adapter = new package_adapter (className.this, itemList);
                viewer.setAdapter (adapter);
    
            }catch (Exception e){
    
            }
        }
    }

Код класса адаптера:

package com.example.hometutor;
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    import org.w3c.dom.Text;
    
    import java.util.List;
    
    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.RecyclerView;
    
    public class package_adapter extends RecyclerView.Adapter<package_adapter.packageholder> {
        private Context context;
        private List <item> itemList;
        @NonNull
        @Override
        public packageHolder onCreateViewHolder( @NonNull ViewGroup parent , int viewType ) {
            LayoutInflater inflater = LayoutInflater.from (context);
            View view = inflater.inflate (R.layout.item, null);
            return new packageHolder (view);
        }
    
        @Override
        public void onBindViewHolder( @NonNull packageHolder holder , int position ) {
            item packs = itemList.get (position);
            holder.package_name.setText (packs.getName());
            holder.package_creator.setText (packs.getCreator_name ());
            holder.package_got_likes_count.setText (String.valueOf (packs.getLikes ()));
        }
    
        @Override
        public int getItemCount() {
            return itemList.size ();
        }
    
        class packageHolder extends RecyclerView.ViewHolder{
            ImageView package_ico;
            TextView package_name, package_creator, package_got_likes_count;
            packageHolder( @NonNull View itemView ) {
                super (itemView);
    
                package_ico = itemView.findViewById (R.id.package_imgage);
                package_name = itemView.findViewById (R.id.package_name);
                package_creator = itemView.findViewById (R.id.creator);
                package_name = itemView.findViewById (R.id.likes);
            }
        }
    }



Я так расстроен этой ошибкой. Пожалуйста, помогите мне!! Заранее спасибо

Что я уже пробовал:

У меня есть все, что я могу. Я попытался добавить конструктор, но он не вернул мне результат

Unicas

Извините за плохое форматирование, потому что я новичок на этом сайте

Richard MacCutchan

Пожалуйста, отредактируйте свой вопрос и добавьте теги <pre> вокруг вашего кода. Вы можете легко добавить их с помощью код кнопка над окном редактирования.

David Crow

- Я знаю, что они могут быть. схожий вопросы к этому но это так совершенно разный от них."

Не может быть и того, и другого.

"Когда я определяю адаптер в MainActivity.java, это дает мне ошибку:
Адаптер не может быть применен к (package_name, java.utill.Список<package_name>)"

Какая линия производит эту ошибку? Является ли это ошибкой во время компиляции или исключением, возникающим во время выполнения?

Намеренно ли это делает ваш файл JSON нет содержать имя, создатель, или нравится поля?

Возможно, вы захотите рассмотреть вопрос о перемещении вашего itemLoader() код в отдельный поток, чтобы избежать NetworkOnMainThreadException быть брошенным.

1 Ответов

Рейтинг:
8

JudyL_MD

Вам действительно нужно добавить свой собственный конструктор. Сообщение довольно явное-вы делаете недопустимый вызов, когда делаете это

adapter = new package_adapter (className.this, itemList);
RecyclerView.Адаптер делает это нет есть конструктор, который принимает параметры.

Основываясь на остальной части класса, ваш конструктор должен быть чем-то вроде
public package_adapter (Context ctx, List<item> items)
{
itemList = items;
context = ctx;
}

Вы говорите, что "пытались добавить конструктор, но он не вернул мне результат" - что это значит? Какую ошибку или неожиданное поведение вы получаете? Я предполагаю, что это, вероятно, ошибка в любом вашем синтаксическом анализе, чтобы получить значения, используемые для построения пункт или что-то в этом роде. пункт сам класс (код не показан). Используйте свой отладчик и посмотрите, что каждый из них делает. пункт выглядит как. То, что вы показали из класса адаптера, выглядит нормально.