我开始学习Android,我正在尝试开发一款应用。我遇到了一些困难,比如在数据库中保存数据。
我使用MVP模式(模型视图演示者)构建了应用程序。在视图中,我有一些字段(例如代码和文本),我想保存在数据库中。
查看
public class PostView extends Fragment {
DatabaseHelper dbHelper;
PostPresenterImpl postPresenterImpl = new PostPresenterImpl(getActivity());
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
View view = inflater.inflate(R.layout.fragment_post, null);
id_server = (EditText) view.findViewById(R.id.editText1);
content = (EditText) view.findViewById(R.id.editText2);
id_search = (EditText) view.findViewById(R.id.editText3);
...
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText("");
PostModel postModel = new PostModel();
postModel.setIdServer(Integer.parseInt(id_server.getText().toString()));
postModel.setContent(content.getText().toString());
System.out.println("setOnClickListener");
//postPresenterImpl.setContext(getActivity().getApplicationContext());
postPresenterImpl.addPost(postModel);
//list = postPresenterImpl.getAllStudentsList();
//tv.setText(postPresenterImpl.print(list));
}
});
演示
public class PostPresenterImpl implements PostPresenter {
private Context context;
public PostPresenterImpl(Context c){
context = c;
}
@Override
public boolean addPost(PostModel postModel) {
Post post = new Post(context);
System.out.println("postModel " + postModel.getIdServer());
System.out.println("postModel " + postModel.getContent());
System.out.println("postModel " + postModel.getTimeStamp());
System.out.println("PostPresenterImpl - addPost");
post.addPostDetail(postModel);
return true;
}
模型
public class Post extends SQLiteOpenHelper implements Common {
public static String TAG = "tag_post";
private Context context;
public PostPresenterImpl(Context c){
context = c;
}
public Post(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// assigning context Change your constructor
this.context = context;
}
public long addPostDetail(PostModel postModel) {
System.out.println("addPostDetail");
SQLiteDatabase db = getWritableDatabase();
// Creating content values
ContentValues values = new ContentValues();
values.put(KEY_IDSERVER, postModel.getIdServer());
values.put(CONTENT, postModel.getContent());
// insert row in post table
long insert = db.insert(TABLE_POST, null, values);
return insert;
}
执行应用程序并在屏幕上填充filds后,将启动一个激活:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
在PostPresenterImpl类上我打印了objetct的值,这没关系。 Anny sugest,plis?
答案 0 :(得分:2)
PostPresenterImpl postPresenterImpl = new PostPresenterImpl(getActivity());
将此初始化移至片段生命周期中的onAttach()
或更高版本。在实例初始化阶段,片段尚未附加到活动,getActivity()
返回null
。
您看到的例外情况是由null
传递给Context
到SQLiteOpenHelper
构造函数的。{/ 1}。
答案 1 :(得分:1)