首页 > 解决方案 > 在 SQLite Android Studio 中插入数据的问题

问题描述

我在 Android Studio 中的应用程序的另一个问题。我尝试在“SQLite”中添加数据,从我的观点来看,代码似乎是正确的,考虑到我刚开始编程 java。似乎出了点问题,没有向我显示“添加成功”的消息,并且 'setText=" "' 不起作用。

主 java 文件 - “MainFragment”

package com.example.licenta23;

import android.Manifest;
import android.app.Activity;
import android.app.AppComponentFactory;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;

import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MainFragment extends Fragment {

EditText actv1, edtModel, actv2, actv3, actv4, edtFabricatie, edtPret;
Button btnChoose, btnAdd, btnList;
ImageView imageView3;

final int REQUEST_CODE_GALLERY = 999;

public static SQLiteHelper sqLiteHelper;

private List<MarcaItem> marcaList;


@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);

    init(view);
    fillMarcaList();


    AutoCompleteTextView editText = view.findViewById(R.id.actv1);
    AutoCompleteMarcaAdapter adapter = new AutoCompleteMarcaAdapter(getActivity(), marcaList);
    editText.setAdapter(adapter);

    AutoCompleteTextView editText2 = view.findViewById(R.id.actv2);
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, CAROSERIE);
    editText2.setAdapter(adapter2);

    AutoCompleteTextView editText3 = view.findViewById(R.id.actv3);
    ArrayAdapter<String> adapter3 = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, COMBUSTIBIL);
    editText3.setAdapter(adapter3);

    AutoCompleteTextView editText4 = view.findViewById(R.id.actv4);
    ArrayAdapter<String> adapter4 = new ArrayAdapter<String>(getActivity(),
            android.R.layout.simple_list_item_1, CULOARE);
    editText4.setAdapter(adapter4);




    return view;
}

private void fillMarcaList() {

    ...


    sqLiteHelper = new SQLiteHelper(getActivity(), "CarDB.sqlite", null, 1);

    sqLiteHelper.queryData("CREATE TABLE IF NOT EXISTS CAR (Id INTEGER PRIMARY KEY AUTOINCREMENT, alegemarca VARCHAR, model VARCHAR, caroserie VARCHAR, combustibil VARCHAR, culoare VARCHAR, fabricatie VARCHAR, pret VARCHAR, image BLOG)");

    btnChoose.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String[] permissions =  new String[]{Manifest.permission.READ_EXTERNAL_STORAGE};

            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
                return;

            for (String permission : permissions) {
                if (ContextCompat.checkSelfPermission(getActivity(), permission) != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(permissions, REQUEST_CODE_GALLERY); // triggers onRequestPermissionsResult() each time a permission is granted in 'permissions'
                } else {
                    Toast.makeText(getActivity(), "Permission Already Granted", Toast.LENGTH_SHORT).show();

                    Intent intent = new Intent(Intent.ACTION_PICK);
                    intent.setType("image/*");
                    startActivityForResult(intent, REQUEST_CODE_GALLERY);
                }
            }
        }
    });

    btnAdd.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            try{
                sqLiteHelper.insertData(
                        actv1.getText().toString().trim(),
                        edtModel.getText().toString().trim(),
                        actv2.getText().toString().trim(),
                        actv3.getText().toString().trim(),
                        actv4.getText().toString().trim(),
                        edtFabricatie.getText().toString().trim(),
                        edtPret.getText().toString().trim(),
                        imageViewToByte(imageView3)
                );
                Toast.makeText(getActivity().getApplicationContext(), "Added successfully!", Toast.LENGTH_SHORT).show();
                actv1.setText("");
                edtModel.setText("");
                actv2.setText("");
                actv3.setText("");
                actv4.setText("");
                edtFabricatie.setText("");
                edtPret.setText("");
                imageView3.setImageResource(R.mipmap.ic_launcher);
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    });

}

@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(getContext(), "You don't have permission to acces file location!", Toast.LENGTH_SHORT).show();
        }
        return;

    }

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

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


    if(requestCode == REQUEST_CODE_GALLERY && resultCode == Activity.RESULT_OK && data != null) {
        Uri uri = data.getData();
        try {
            InputStream inputStream = getActivity().getContentResolver().openInputStream(uri);

            Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
            imageView3.setImageBitmap(bitmap);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

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

private void init(View view){
    actv1 = (EditText) view.findViewById(R.id.actv1);
    edtModel = (EditText) view.findViewById(R.id.edtModel);
    actv2 = (EditText) view.findViewById(R.id.actv2);
    actv3 = (EditText) view.findViewById(R.id.actv3);
    actv4 = (EditText) view.findViewById(R.id.actv4);
    edtFabricatie = (EditText) view.findViewById(R.id.edtFabricatie);
    edtPret = (EditText) view.findViewById(R.id.edtPret);
    btnChoose = (Button) view.findViewById(R.id.btnChoose);
    btnAdd = (Button) view.findViewById(R.id.btnAdd);
    btnList = (Button) view.findViewById(R.id.btnList);
    imageView3 = (ImageView) view.findViewById(R.id.imageView3);
}

public static byte[] imageViewToByte(ImageView image) {
    Bitmap bitmap = ((BitmapDrawable) image.getDrawable()).getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
    byte[] byteArray = stream.toByteArray();
    return byteArray;
}

}

SQLiteHelper:

package com.example.licenta23;

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

import androidx.annotation.Nullable;

public class SQLiteHelper extends SQLiteOpenHelper {

public SQLiteHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
    super(context, name, factory, version);
}

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

public void insertData(String alegemarca, String model, String caroserie, String combustibil, String culoare, String fabricatie, String pret, byte[] image) {
    SQLiteDatabase database = getWritableDatabase();
    String sql = "INSERT INTO CAR VALUES (NULL, ?, ?, ?, ?, ?, ?, ?)";

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

    statement.bindString(1, alegemarca);
    statement.bindString(2, model);
    statement.bindString(3, caroserie);
    statement.bindString(4, combustibil);
    statement.bindString(5, culoare);
    statement.bindString(6, fabricatie);
    statement.bindString(7, pret);
    statement.bindBlob(8, image);

    statement.executeInsert();
}

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

}

@Override
public void onCreate(SQLiteDatabase db) {

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}

谢谢!

标签: javaandroidandroid-studioandroid-fragmentsandroid-sqlite

解决方案


从外观上看,您应该database.prepareStatement statement.bindString像在本教程中一样使用

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

    statement.setString(1, alegemarca);
    statement.setString(2, model);
    statement.setString(3, caroserie);
    statement.setString(4, combustibil);
    statement.setString(5, culoare);
    statement.setString(6, fabricatie);
    statement.setString(7, pret);
    statement.setBytes(8, readFile(image));

    statement.executeInsert();

PS:请注意,我已将您更改bindBlob这里setBytes所说的


推荐阅读