Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.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 E/RecyclerView:未连接适配器;使用API 29跳过布局错误Android Studio_Java_Android_Android Recyclerview_Android Adapter - Fatal编程技术网

Java E/RecyclerView:未连接适配器;使用API 29跳过布局错误Android Studio

Java E/RecyclerView:未连接适配器;使用API 29跳过布局错误Android Studio,java,android,android-recyclerview,android-adapter,Java,Android,Android Recyclerview,Android Adapter,因此,我在Android Studio中跟踪一段视频,从头开始制作新闻应用程序,结果遇到了标题错误。我试着在关于同一个错误的问题中遵循许多答案,但很难理解,因为正如我所看到的,每个人都有不同的代码。下面是我的适配器代码: package com.example.newsapp4; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android

因此,我在Android Studio中跟踪一段视频,从头开始制作新闻应用程序,结果遇到了标题错误。我试着在关于同一个错误的问题中遵循许多答案,但很难理解,因为正如我所看到的,每个人都有不同的代码。下面是我的适配器代码:

package com.example.newsapp4;

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 androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import com.example.newsapp4.Model.Articles;
import com.squareup.picasso.Picasso;

import java.util.List;

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

    Context context;
    List<Articles> articles;

    public Adapter(Context context, List<Articles> articles) {
        this.context = context;
        this.articles = articles;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        final Articles a = articles.get(position);

        String imageUrl = a.getUrlToImage();

        holder.tvTitle.setText(a.getTitle());
        holder.tvSource.setText(a.getSource().getName());
        holder.tvDate.setText(a.getPublishedAt());


        Picasso.with(context).load(imageUrl).into(holder.imageView);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {

        TextView tvTitle,tvSource,tvDate;
        ImageView imageView;
        CardView cardView;

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

            tvTitle = itemView.findViewById(R.id.tvTitle);
            tvSource = itemView.findViewById(R.id.tvSource);
            tvDate = itemView.findViewById(R.id.tvDate);
            imageView = itemView.findViewById(R.id.image);
            cardView = itemView.findViewById(R.id.cardView);

        }
    }
}
在到达具有适配器的活动之前,还有更多的活动

我猜在我的api密钥中,我需要输入网页给我的密钥,比如很多数字和字母,而不是链接

如果您需要,可以随意要求更多的代码


谢谢你的时间

onResponse
移动到
onCreate
之前的
retrieveJson(国家/地区,API_键)

适配器中创建一个setter,如下所示

public void setArticles(List<Articles> newArticle) {
    if (newArticle != null && newArticle.size() > 0) {
        this.articles = newArticle;
        notifyDataSetChanged();
    }
}
注意:recylerView在膨胀时应始终连接到适配器,您不能等待API响应,因为它在不同的线程上运行,并且需要时间获取数据,直到那时,操作系统将尝试膨胀recylerView,如果没有连接适配器,操作系统将失败


因此,即使数据为空,我们也应该始终连接适配器,因为这不是问题所在。当您从API接收数据时,您可以传递数据,然后调用notifyDataSetChanged(),然后适配器将处理每个项的膨胀。

谢谢,错误消失了,但我无法在我的cardview中查看新闻API中的数据。您是否完成了我上面解释的所有操作?是的,我完成了您告诉我的所有操作,并且没有显示API中的任何信息。我从这个网站的api获得信息:你能用最新的变化更新你的问题吗,这样我就能看到它们并帮助你进一步调试我现在终于有了数据显示,问题是当我发布api时,我低估了整个api链接,所以源,在这种情况下,bbc新闻不会出现,我刚刚做了这个
publicstaticstringsource=“bbc新闻”。然后在ApiInterface中,在
getHeadlines
中,我将源代码作为字符串放入查询中,您的提示也很好!,谢谢你的时间!
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.newsapp4">


    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".sportsnews" android:screenOrientation="locked"/>
        <activity android:name=".profile_activity" android:screenOrientation="locked"/>
        <activity android:name=".menuContent" android:screenOrientation="locked"/>
        <activity android:name=".MainActivity" android:screenOrientation="locked">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" />
    </application>

</manifest>

adapter = new Adapter(sportsnews.this,articles);
recyclerView.setAdapter(adapter);
public void setArticles(List<Articles> newArticle) {
    if (newArticle != null && newArticle.size() > 0) {
        this.articles = newArticle;
        notifyDataSetChanged();
    }
}
adapter.setArticles(articles)