java - Intent 另一个布局的运行时错误

标签 java android android-intent android-sqlite

我的问题是将我当前的布局转换为另一个布局,它有运行时异常错误。我的问题是将我当前的布局更改为另一个布局,它有运行时异常错误。我的问题是将我当前的布局更改为另一个布局,它有运行时异常错误。我的问题是将我当前的布局更改为另一个布局,它有运行时异常错误

MainActivity.java

package com.example.kaylee.tutorfinder;

import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    EditText email;
    EditText password;
    Button login;
    Button signup;
    DBHelper db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        db = new DBHelper(this);
        email = findViewById(R.id.editText_email);
        password = findViewById(R.id.editText_password);
        login = findViewById(R.id.btnlogin);
        signup = findViewById(R.id.btnsignup);


        signup.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent signupIntent = new Intent(MainActivity.this, SignUp.class);
                startActivity(signupIntent);

            }

        });

        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    String user = email.getText().toString();
                    String pass = password.getText().toString();

                    Boolean res = db.checkAcc(user,pass);
                    if(res==true){
                        Intent mainIntent = new Intent(MainActivity.this, MainPage.class);
                        startActivity(mainIntent);

                    }
                    else{
                        Toast.makeText(MainActivity.this,"Please Enter Again",Toast.LENGTH_SHORT).show();
                    }


            }
        });

    }
}

DBHelper.java

package com.example.kaylee.tutorfinder;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;

public class DBHelper extends SQLiteOpenHelper {
    public static final String DATABASE_NAME="register.db";
    public static final String TABLE_NAME="register";
    public static final String COL_1="ID";
    public static final String COL_2="email";
    public static final String COL_3="password";


    public DBHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL("CREATE TABLE register (ID INTEGER PRIMARY KEY AUTOINCREMENT,email TEXT UNIQUE, password TEXT)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
        onCreate(sqLiteDatabase);
    }

    public long AddAcc(String email, String password){
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put("email",email);
        contentValues.put("password",password);
        long res = db.insert("register",null,contentValues);
        db.close();
        return res;
    }

    public boolean checkAcc(String username,String password){
       String[] columns = { COL_1 };
       SQLiteDatabase db = getReadableDatabase();
       String selection = COL_2  + "=?" + " and " + COL_3 + "=?";
       String[] selectionArgs = {username,password};
       Cursor cursor = db.query(TABLE_NAME,columns,selection,selectionArgs,null,null,null);
       int count = cursor.getCount();
       cursor.close();
       db.close();


       if(count>0)
           return true;
       else
           return false;
    }


    public void queryData(String sql){
        SQLiteDatabase database = getWritableDatabase();
        database.execSQL(sql);

    }

    public void insertData(String name,double price,String description,byte[] image ){
        SQLiteDatabase database = getWritableDatabase();
        String sql = "INSERT INTO ITEMS VALUES (NULL,?,?,?) ";

        SQLiteStatement statement = database.compileStatement(sql);
        statement.clearBindings();

        statement.bindString(1,name);
        statement.bindDouble(2,price);
        statement.bindString(3,description);
        statement.bindBlob(4,image);


        statement.executeInsert();
    }

    public Cursor getData(String sql){
        SQLiteDatabase database = getReadableDatabase();
        return database.rawQuery(sql,null);

    }


}

我想要的页面

主页.java

package com.example.kaylee.tutorfinder;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.sqlite.SQLiteOpenHelper;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import java.io.FileNotFoundException;
import java.io.InputStream;

public class MainPage extends AppCompatActivity {


    EditText edtName,edtPrice,edtdesc;
    Button btnPost,btnImage;
    ImageView imageView;
    public static SQLiteOpenHelper DBHelper;
    final int REQUEST_CODE_GALLERY = 999;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainpage);
        DBHelper = new DBHelper(this);

        ((DBHelper) DBHelper).queryData("CREATE TABLE IF NOT EXISTS PRODUCT " +
                "(ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, price VARCHAR, description VARCHAR,image BLOB");
        edtName = (EditText)findViewById(R.id.edtName);
        edtPrice = (EditText)findViewById(R.id.edtPrice);
        edtdesc = (EditText)findViewById(R.id.edtDescription);
        btnPost = (Button)findViewById(R.id.btnPost);
        btnImage = (Button)findViewById(R.id.btnImage);
        imageView = (ImageView)findViewById(R.id.imageView);

        btnImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ActivityCompat.requestPermissions(
                        MainPage.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                        REQUEST_CODE_GALLERY
                );
            }
        });



    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {


        if(requestCode == REQUEST_CODE_GALLERY){
            if(grantResults.length >0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                Intent intent = new Intent(Intent.ACTION_PICK);
                intent.setType("image/*");
                startActivityForResult(intent,REQUEST_CODE_GALLERY);

            }
            else{
                Toast.makeText(getApplicationContext(),"Permission Denied",Toast.LENGTH_SHORT).show();

            }
            return;


        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(requestCode == REQUEST_CODE_GALLERY && resultCode == RESULT_OK && data !=null){
            Uri uri = data.getData();

            try{
                InputStream inputStream = getContentResolver().openInputStream(uri);
                Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                imageView.setImageBitmap(bitmap);
            } catch(FileNotFoundException e){
                e.printStackTrace();

            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

错误日志

05-23 04:32:03.325 9734-9734/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.kaylee.tutorfinder, PID: 9734
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.kaylee.tutorfinder/com.example.kaylee.tutorfinder.MainPage}: android.database.sqlite.SQLiteException: near "BLOB": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS PRODUCT (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, price VARCHAR, description VARCHAR,image BLOB
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
     Caused by: android.database.sqlite.SQLiteException: near "BLOB": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS PRODUCT (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, price VARCHAR, description VARCHAR,image BLOB
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
        at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
        at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
        at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1674)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1605)
        at com.example.kaylee.tutorfinder.DBHelper.queryData(DBHelper.java:63)
        at com.example.kaylee.tutorfinder.MainPage.onCreate(MainPage.java:36)
        at android.app.Activity.performCreate(Activity.java:5990)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5254) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

最佳答案

尝试在 DBManager 中修复此错误

Unable to start activity ComponentInfo{com.example.kaylee.tutorfinder/com.example.kaylee.tutorfinder.MainPage}: android.database.sqlite.SQLiteException: near "BLOB": syntax error (code 1): , while compiling: CREATE TABLE IF NOT EXISTS PRODUCT (ID INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR, price VARCHAR, description VARCHAR,image BLOB

) 添加到查询的最后一个,然后重试

关于java - Intent 另一个布局的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56268161/

相关文章:

java - 如何在 javafx 中调整 imageview 图像的大小?

java - 是否有一个公共(public)位置包含所有 Spring XML 的声明

java - 当我使用 nohup 时 Spring Boot 应用程序自动关闭

android - 当 Android 小部件 RemoteViewService 被销毁时

android - 从另一个应用程序调用一个应用程序

java - 如何从预先存在的数组创建数组?

java - WiFi 直接演示

java - 哪些 Android API 用于简单的日期和时间函数

Button 和 EditText 之上的 Android View 不会遮挡它们

Android 深度链接无法捕获重定向 url