2016-08-06 5 views
0

私はアプリケーションを構築していますが、そこにデータを書き込もうとすると、エラーがログに表示されます。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

+3

そのがnullのオブジェクト参照をお気軽に値はまたあなたのオブジェクトヌルです。 – Moulesh

+0

あなたは 'inserir()'を呼び出した直後に 'ActCadContatos'クラスで' finish() 'を呼び出しています。多分それはトラブルを引き起こすでしょう。 – Shaishav

答えて

0

ここでは210
RepositorioContato repositorioContato; 

:今、私たちは "スコープ" の概念について知っているよう

enter image description here

。あなたは再び "repositorioContato"(すなわち{}ブロックを試してみてください、この範囲で)

ここ
RepositorioContato repositorioContato = new RepositorioContato(conn); 

を、同一の参照を作成し、初期化されている下記

enter image description here

ですから、

を呼び出すときenter image description here

これは一番上の参照にアクセスします(tryブロックスコープは

ホープ)...ここにアクセス可能な任意の問題がまだpersistes場合、私は、明らかにされるではない、デバッガを持っていて、右渡しているかどうかを確認... :)

+0

ありがとう、そんなに! –

関連する問題