私はアプリケーションを構築していますが、そこにデータを書き込もうとすると、エラーがログに表示されます。Android StudioでSQLiteを使用してデータベースにアクセスできない
クラスActCadContatos.java
Databaseクラス
package com.example.gabrielgomes.agendacontact.database;
import android.content.Context;
import android.database.sqlite.*;
/**
* Created by Gabriel Gomes on 31/07/2016.
*/
//Class responsable by create Database, SQLiteOpenHelper just be extends
public class DataBase extends SQLiteOpenHelper {
//Constructor
public DataBase(Context context){
//Context, database name, null, version of schema
super(context, "AGENDA", null, 1);
}
//Create table
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(ScriptSQL.getCreateContato());
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
スクリプトクラス
package com.example.gabrielgomes.agendacontact.database;
/**
* Created by Gabriel Gomes on 31/07/2016.
*/
//Class for script SQL
public class ScriptSQL {
//Static method, don't need instace for access it
public static String getCreateContato(){
StringBuilder sqlBuilder = new StringBuilder();
sqlBuilder.append("CREATE TABLE IF NOT EXISTS CONTATO (");
sqlBuilder.append("_id INTEGER NOT NULL ");
sqlBuilder.append("PRIMARY KEY AUTOINCREMENT, ");
//sqlBuilder.append("NOME VARCHAR (200), ");
sqlBuilder.append("TELEFONE VARCHAR (14), ");
sqlBuilder.append("TIPOTELEFONE VARCHAR (1), ");
sqlBuilder.append("EMAIL VARCHAR (255), ");
sqlBuilder.append("TIPOEMAIL VARCHAR (1), ");
sqlBuilder.append("ENDERECO VARCHAR (255), ");
sqlBuilder.append("TIPOENDERECO VARCHAR (1), ");
sqlBuilder.append("DATASESPECIAIS DATE, ");
sqlBuilder.append("TIPODATASESPECIAIS VARCHAR (1), ");
sqlBuilder.append("GRUPOS VARCHAR (255) ");
sqlBuilder.append(");");
return sqlBuilder.toString();
}
}
Repositorioクラス
package com.example.gabrielgomes.agendacontact.dominio;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.*;
import android.widget.ArrayAdapter;
import com.example.gabrielgomes.agendacontact.R;
import com.example.gabrielgomes.agendacontact.dominio.entidades.Contato;
/**
* Created by Gabriel Gomes on 31/07/2016.
*/
//Class responsible for realize get the data in the content view, consulting in the database, and return the object Array to fill ListView
public class RepositorioContato {
private SQLiteDatabase conn;
//Constructor
public RepositorioContato(SQLiteDatabase conn){
this.conn = conn;
}
//Method for insert datas of the activity in the database
public void inserir(Contato contato){
ContentValues values = new ContentValues();
values.put("NOME", contato.getNome());
values.put("TELEFONE", contato.getTelefone());
values.put("TIPOTELEFONE", contato.getTipoTelefone());
values.put("EMAIL", contato.getEmail());
values.put("TIPOEMAIL", contato.getTipoEmail());
values.put("ENDERECO", contato.getEndereco());
values.put("TIPOENDERECO", contato.getTipoEndereco());
values.put("DATASESPECIAIS", contato.getDatasEspeciais().getTime());
values.put("TIPODATASESPECIAIS", contato.getTipoDatasEspeciais());
values.put("GRUPOS", contato.getGrupos());
conn.insertOrThrow("CONTATO", null, values);
}
//Atention: atribute bellow is kind date, so it's need the .getTime() method.
//Test for insert datas
/*public void testInserirContatos(){
for (int i=0; i<10; i++){
//For insert datas in the database
ContentValues values = new ContentValues();
values.put("TELEFONE", "5555555");
//name table, null, values.put
conn.insertOrThrow("CONTATO", null, values);
}
}*/
//This method make the search and save all datas of the table on the Array
public ArrayAdapter<String> buscaContatos(Context context){
ArrayAdapter<String> adpContatos = new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1);
//Save all resgitry //.query - Method for consulting: table name,
Cursor cursor = conn.query("CONTATO", null, null, null, null, null, null);
//If content of cursor have data more 0, fill ArrayAdapter with cursor data
if (cursor.getCount() > 0) {
//Move cursor to first data of the Array
cursor.moveToFirst();
//Loop for take all registry if have it
do {
//getString catch the index column
String telefone = cursor.getString(1);
adpContatos.add(telefone);
} while (cursor.moveToNext());
}
return adpContatos;
}
}
content_act_cad_contato.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.gabrielgomes.agendacontact.ActCadContatos"
tools:showIn="@layout/activity_act_cad_contatos"
android:orientation="vertical">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlCampoNome">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Nome"
android:id="@+id/textView" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/edtNome" />
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlCampoTelefone">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Telefone"
android:id="@+id/textView2" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="phone"
android:ems="10"
android:id="@+id/edtTelefone" />
<Spinner
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/spnTipoTelefone" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlCampoEmail">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Email"
android:id="@+id/textView3" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/edtEmail"
android:inputType="textEmailAddress" />
<Spinner
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/spnTipoEmail" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlCampoEndereco">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Endereco"
android:id="@+id/textView4" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/edtEndereco"
android:inputType="textPersonName" />
<Spinner
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/spnTipoEndereco" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlCampoDatasEspeciais">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Datas_Especiais"
android:id="@+id/textView5" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/edtDatasEspeciais"
android:inputType="date" />
<Spinner
android:layout_width="150dp"
android:layout_height="wrap_content"
android:id="@+id/spnDatasEspeciais" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/lnlGrupo">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/lbl_Grupos"
android:id="@+id/textView6" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:id="@+id/edtGrupos"
android:inputType="textPersonName" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
LOG:
8月6日16:35:22.832 2268から2268/com.example.gabrielgomes.agendacontact E/AndroidRuntime:致命的な例外:メイン プロセス:COM。 example.gabrielgomes.agendacontact、PID:2268 java.lang.NullPointerException:仮想メソッド 'void com.example.gabrielgomes.agendacontact.dominio.RepositorioContato.inserir(com.example.gabrielgomes.agendacontact.dominio.entidades.Contato ) 'nullのオブジェクト参照で com。 android.app.Activity.onMenuItemSelected(Activity.javaでcom.example.gabrielgomes.agendacontact.ActCadContatos.onOptionsItemSelected(ActCadContatos.java:152) でexample.gabrielgomes.agendacontact.ActCadContatos.inserir(ActCadContatos.java:183) : 2885)android.support.v7でandroid.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:179でandroid.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:404) で) 。 view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:100) android.support.v7.app.ToolbarActionBar $ 2.onMenuItemClick(ToolbarActionBar.java:69) android.support.v7.widget.Toolbar $ 1.onMenuItemClick(Toolbar.java:169) android.support.v7.widget .ActionMenuView $ MenuBuilderCallback.onMenuItemSelected(ActionMenuView.java:760)android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) android.support.v7.view.menu.MenuItemImpl.invokeの (メニューアイテムの作成)。 ) android.s android.widget.AbsListView.performItemClick(AbsListView.java:1146)のupport.v7.view.menu.MenuPopupHelper.onItemClick(MenuPopupHelper.java:191) android.widget.AdapterView.performItemClick(AdapterView.java:305) android.widget.AbsListView $ PerformClick.Run(AbsListView.java:3053) とandroid.widget.AbsListView $ 3.run(AbsListView.java:3860) (android.os.Handler.handleCallback(Handler.java:739))の がアンドロイドです。 )android.os.Handler.dispatchMessage(Handler。Handler.dispatchMessage)にある です。java:95) とandroid.os.Looper.loop(Looper.java:135) とandroid.app.ActivityThread.main(ActivityThread.java:5254) at java.lang.reflect.Method.invoke(ネイティブメソッド) at java.lang.reflect.Mavod.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) 08-06 16:35:25.308 2268-2268/com.example.gabrielgomes.agendacontact I/Process:シグナルを送信しています。 PID:2268 SIG:9 08-06 16:35:27.992 4214-4239/com.example.gabrielgomes.agendacontact D/OpenGLRenderer:endAllStagingAnimators on 0x7fe895d4a400(RippleDrawable)ハンドル0x7fe895c7f5a0 08-06 16:36:56.285 4214- 4222/com.example.gabrielgomes.agendacontact全スレッドの中断:7.399ms 08-06 16:38:36.537 4214-4222/com.example.gabrielgomes.agendacontact全スレッドの中断:9.017すべてのスレッドを停止する:5.852ms 08-06 16:43:37.818 4214-4222/com.example.gabrielgomes .agendacontact W/art:すべてのスレッドを中断しました:8.820ms
そのがnullのオブジェクト参照をお気軽に値はまたあなたのオブジェクトヌルです。 – Moulesh
あなたは 'inserir()'を呼び出した直後に 'ActCadContatos'クラスで' finish() 'を呼び出しています。多分それはトラブルを引き起こすでしょう。 – Shaishav