如何在另一个活动中保存用户图纸到SQLITE数据库



我有一个类扩展视图,我在那里进行图纸。我在完成图纸后从菜单中打开了另一个活动。在第二个活动中,有用于用户名的EditText字段,还有一个保存按钮。我想将它们保存到我的SQLite数据库,首先是绘图,然后将其保存到与用户相关的图像。我怎样才能做到这一点 ?现在,这是我目前的代码,我遇到了一个错误。

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.example.mydrawingapp.View.AppView.getContext()' on a null object reference
        at com.example.mydrawingapp.SecondActivity$1.onClick(SecondActivity.java:31)

我的数据库助手类:

   public class DatabaseHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME = "drawingApp.db";
            public static final String TABLE_NAME="saveUser";
    public static final String COL_1 = "ID";
    public static final String COL_2="username";
    public static final String COL_3="image";

    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null,1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE saveUser (ID INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT,image BLOB)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       db.execSQL(" DROP TABLE IF EXISTS " + TABLE_NAME);
       onCreate(db);
    }
    public long addImage(String user, byte[] image){
        SQLiteDatabase database = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("username",user);
        contentValues.put("image",image);
        long res = database.insert("saveUser",null,contentValues);
        database.close();
        return res;
    }
}

这是我第二个活动类中的代码:

        public class SecondActivity extends AppCompatActivity {
    private EditText textUsername;
    private Button buttonRegister;
    private String username;
    private AppView appView;
    private DatabaseHelper dbHelper;
    private  byte[] image;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        textUsername = (EditText) findViewById(R.id.editText);
        username = textUsername.getText().toString();
        buttonRegister=(Button) findViewById(R.id.saveButton);
        buttonRegister.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                appView= new AppView(appView.getContext(),null );
                image = appView.saveImage();
                dbHelper.addImage(username,image);
            }
        });
    }
}

主要活动:

   public class MainActivity extends AppCompatActivity {
    private AppView appView;
    private AlertDialog.Builder currentAlertDialog;
    private ImageView widthImageView;
    private AlertDialog dialogLineWidth;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        appView = findViewById(R.id.view);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);

        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.clearId:
                appView.clear();
                break;
            case R.id.saveId:
                openLoginDialog();
                break;
            case R.id.lineWidth:
                showLineWidthDialog();
                break;
        }
        return super.onOptionsItemSelected(item);
    }
    private void openLoginDialog() {
        Intent intent = new Intent(this,SecondActivity.class);
        startActivity(intent);
    }
    void showLineWidthDialog() {
        currentAlertDialog = new AlertDialog.Builder(this);
        View view = getLayoutInflater().inflate(R.layout.width_dialog, null);
        final SeekBar widthSeekBar = view.findViewById(R.id.widthSeekBar);
        Button setLineWidthButton = view.findViewById(R.id.widthDialogButton);
        widthImageView = view.findViewById(R.id.imageViewId);
        setLineWidthButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                appView.setLineWidth(widthSeekBar.getProgress());
                dialogLineWidth.dismiss();
                currentAlertDialog = null;
            }
        });

        widthSeekBar.setOnSeekBarChangeListener(widthSeekBarChange);

        currentAlertDialog.setView(view);
        dialogLineWidth = currentAlertDialog.create();
        dialogLineWidth.setTitle("Set Line Width");
        dialogLineWidth.show();
    }
    SeekBar.OnSeekBarChangeListener widthSeekBarChange = new SeekBar.OnSeekBarChangeListener() {
        Bitmap bitmap = Bitmap.createBitmap(400, 100, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            Paint p = new Paint();
            p.setColor(appView.getDrawingColor());
            p.setStrokeCap(Paint.Cap.ROUND);
            p.setStrokeWidth(progress);
            bitmap.eraseColor(Color.WHITE);
            canvas.drawLine(30, 50, 370, 50, p);
            widthImageView.setImageBitmap(bitmap);
        }
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
        }
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
        }
    };
}

您的 context为null,因此您需要以这种方式初始化:

   public class SecondActivity extends AppCompatActivity {
private EditText textUsername;
private Button buttonRegister;
private String username;
private AppView appView;
private DatabaseHelper dbHelper;
private  byte[] image;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);
    textUsername = (EditText) findViewById(R.id.editText);
    username = textUsername.getText().toString();
    buttonRegister=(Button) findViewById(R.id.saveButton);
    buttonRegister.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            appView= new AppView(SecondActivity.this ,null ); // change this line
            image = appView.saveImage();
            dbHelper.addImage(username,image);
        }
    });
}
buttonRegister.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        appView= new AppView(**appView**.getContext(),null );
        image = appView.saveImage();
        dbHelper.addImage(username,image);
    }

appView < - 这是单击点的null

最新更新