我无法将数据从改造传输到房间。我从API下载数据,但是当我尝试在会议室数据库中获取数据时,收到错误消息:
“由以下原因引起:java.lang.ClassCastException:java.util.ArrayList无法 强制转换为”。
调试显示
中的错误 newsDao.insert((News) news);
AND
.subscribe(new Consumer<List<News>>()
这是我的代码。
import android.arch.persistence.room.Room;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import java.util.List;
import burtsev.a.k.news.Model.News;
import burtsev.a.k.news.Retrofit.NewsAPI;
import burtsev.a.k.news.Retrofit.RetrofitClient;
import burtsev.a.k.news.Room.NewsDao;
import burtsev.a.k.news.Room.NewsDatabase;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
import retrofit2.Retrofit;
public class Splash extends AppCompatActivity {
public static Splash instance;
public NewsDatabase newsDatabase;
NewsAPI newsAPI;
CompositeDisposable compositeDisposable = new CompositeDisposable();
NewsDao newsDao;
public static Splash getInstance() {
return instance;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
newsDatabase = Room.databaseBuilder(getApplicationContext(),
NewsDatabase.class, "database")
.allowMainThreadQueries()
.build();
newsDao = newsDatabase.newsDao();
Retrofit retrofit = RetrofitClient.getInstance();
newsAPI = retrofit.create(NewsAPI.class);
fetchData();
}
private void fetchData() {
compositeDisposable.add(newsAPI.getNews().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<List<News>>() {
@Override
public void accept(List<News> news) throws Exception {
Intent intent = new Intent(Splash.this, NewsListFragment.class);
// intent.putExtra("news", (Serializable) news);
newsDao.insert((News) news);
startActivity(intent);
}
}));
}
@Override
protected void onStop() {
compositeDisposable.clear();
super.onStop();
}
public NewsDatabase getNewsDatabase() {
return newsDatabase;
}
}
答案 0 :(得分:0)
您正在尝试插入列表,但是您正在尝试将其强制转换为对象。
所以news
不是News
模型。它是List<News>
。如果要插入所有新闻对象。您可以尝试foreach
,也可以在DAO
内创建一个新函数,该函数将立即插入所有列表。
foreach
;
for(News anews: news){
newsDao.insert(anews);
}
一次插入。 DAO类中的新功能应该是;
@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAllNews(List<News> news);
您需要使用subscibe
;
newsDao.insertAllNews(news);