2017-01-20 6 views
0

私はcardViewとrecyclerViewにRSSフィードを解析する方法についてYouTubeのチュートリアルに従っていますが、接続されていないアダプターと同じ問題が発生し続けるため、解決策が見つかりません。私はチュートリアルと同じコードを試してみましたが、まだ動作していないようです。以下は、アダプタクラスの下エラー:E/RecyclerView:アダプタが接続されていません。レイアウトをスキップ

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
ArrayList<FeedItem> feedItems; 
Context context; 
public MyAdapter(Context context, ArrayList<FeedItem>feedItems){ 
    this.feedItems = new ArrayList<>(feedItems); 
    this.context=context; 
} 
@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = LayoutInflater.from(context).inflate(R.layout.custom_row_news_item, parent, false); 
    MyViewHolder holder = new MyViewHolder(view); 
    return holder; 
} 

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

} 

@Override 
public int getItemCount() { 
    return feedItems.size(); 
} 
public class MyViewHolder extends RecyclerView.ViewHolder { 

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

は私のRssReaderクラスです。

メイン続く
public class ReadRss extends AsyncTask<Void, Void, Void> { 
Context context; 
String address = "http://www.sciencemag.org/rss/news_current.xml"; 
ProgressDialog progressDialog; 
ArrayList<FeedItem> feedItems; 
RecyclerView recyclerView; 
URL url; 

public ReadRss(Context context, RecyclerView recyclerView) { 
    this.recyclerView = recyclerView; 
    this.context = context; 
    progressDialog = new ProgressDialog(context); 
    progressDialog.setMessage("Loading..."); 
} 

@Override 
protected void onPreExecute() { 
    progressDialog.show(); 
    super.onPreExecute(); 

} 

@Override 
protected void onPostExecute(Void aVoid) { 
    super.onPostExecute(aVoid); 
    progressDialog.dismiss(); 
    MyAdapter adapter = new MyAdapter(context, feedItems); 
    recyclerView.setLayoutManager((new LinearLayoutManager(context))); 
    recyclerView.setAdapter(adapter); 
} 

@Override 
protected Void doInBackground(Void... params) { 
    ProcessXml(Getdata()); 

    return null; 
} 

public class MainActivity extends AppCompatActivity { 
RecyclerView recyclerView; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
    ReadRss readRss = new ReadRss(this, recyclerView); 
    readRss.execute(); 
} 
} 

任意の提案ですか?

+0

リサイクラビューでアダプタが設定されていないときにアダプタがリサイクラビューに設定されていて、feedItemsリストが空でないことを確認するとこのエラーが発生します – 44kksharma

答えて

0

このコードにはかなりの問題があります。 onPostExecute()まで.setAdapter()に電話していません。これは間違っています。代わりに、アクティビティーが作成されたときにアダプターを追加し、アダプターにデータを動的に追加する必要があります。

public class MainActivity extends AppCompatActivity { 

    RecyclerView recyclerView; 
    MyAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     recyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     ReadRss readRss = new ReadRss(this, recyclerView); 
     recyclerView.setLayoutManager(new LinearLayoutManager(this)) 
     recyclerView.setAdapter(adapter) 
     readRss.execute(); 
    } 
} 

ます。また、新しいデータを追加するには、アダプタにメソッドを追加する必要があります:

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

    List<FeedItem> feedItems; 
    Context context; 

    public MyAdapter(Context context){ 
     this.feedItems = new ArrayList<>(); 
     this.context=context; 
    } 

    public void addItems(FeedItem item) { 
     feedItems.add(item); 
     notifyDataSetChanged(); 
    } 

} 

あなたの非同期操作が戻ると、にaddItems()メソッドを使用以下は、始めるためにいくつかのサンプルコードがありますアダプタにデータを追加します。注:私はArrayList<FeedItem>の宣言をList<FeedItem>に置き換えました。これは一般的な方法であり、リストの実装を簡単に変更することができます。

+0

別のスタックオーバーフローの回答ではなく、これらのうちエラーが修正されたようです。また、私はコードを正確にyoutubersに複製し、彼はうまく働いたので、なぜ私は理解できません –

関連する問題