【发布时间】:2019-07-12 07:01:21
【问题描述】:
无法从获取此输出的数据库中获取特定记录。
我的输出是:
java.lang.RuntimeException:无法启动活动 ComponentInfo{appwork.com.example/appwork.com.example.MainActivity}:java.lang.NullPointerException:尝试调用虚拟方法 'void android.arch.lifecycle.LiveData .observe(android.arch.lifecycle.LifecycleOwner, android.arch.lifecycle.Observer)' 在空对象引用上
我正在使用房间数据库、模型视图、存储库和 Dao 文件来获取实时数据,但无法通过以下内容从数据库中获取特定记录
<pre><code>
public class MainActivity extends AppCompatActivity {
private NoteViewModel noteViewModel;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
noteViewModel =
ViewModelProviders.of(this).get(NoteViewModel.class);
noteViewModel.getNote("test7").observe(this, new Observer<Note>()
{
@Override
public void onChanged(@Nullable Note note)
{
Toast.makeText(MainActivity.this,
"found title is : " +note.getTitle(),
Toast.LENGTH_LONG).show();
}
});
}
}
public class NoteViewModel extends AndroidViewModel
{
private LiveData<Note> note;
public NoteViewModel(@NonNull Application application)
{
super(application);
// note = repository.getNote("");
}
public LiveData<Note> getNote(String search)
{
repository.getNote(search);
if(note != null)
{
return note;
}
return null;
}
}
public class NoteRepository {
private NoteDao noteDao;
private LiveData<Note> note;
public NoteRepository(Application application)
{
NoteDatabase noteDatabase =
NoteDatabase.getInstance(application);
noteDao = noteDatabase.noteDao();
}
public LiveData<Note> getNote(String search)
{
new SearchNoteAsyncTask(noteDao).execute(search);
if(note != null)
{
return note;
}
return null;
}
public static void asyncFinished(LiveData<Note> results)
{
note = results;
}
public static class SearchNoteAsyncTask extends AsyncTask<String, Void, LiveData<Note>>
{
private NoteDao noteDao;
private LiveData<Note> note;
private SearchNoteAsyncTask(NoteDao noteDao)
{
this.noteDao = noteDao;
}
public LiveData<Note> doInBackground(String... search)
{
return noteDao.getNote(search[0]);
}
public void onPostExecute(LiveData<Note> result)
{
asyncFinished(result);
}
}
}
@Dao
public interface NoteDao{
@Query("Select * from note_table where title =:search Order By priority DESC")
LiveData<Note> getNote(String search);
}
我在存储库调用中得到响应,但无法从公共获取价值
static class SearchNoteAsyncTask extends AsyncTask<String, Void, LiveData<Note>>
任何可行的例子都会很棒!
谢谢
【问题讨论】:
-
嗨 Manoj,欢迎来到 SO。这是一个NullPointerException,请参考stackoverflow.com/questions/218384/…
标签: java android nullpointerexception android-room android-mvvm