2017-12-14 9 views
-1

私はSQLiteデータベースにデータを挿入しようとしていますが、何らかの理由でアプリがクラッシュしていますが、何もわかりません。私はちょうど "データベースとテーブルを作成する方法、データを挿入する方法(それはそう思わない)"私のラップトップでアプリを実行することはできませんクラッシュの原因については、Androidスタジオは何を言ってください「Android Simulator」の助けを借りて呼び出されます。以下はsqliteデータベースにデータを挿入する際にエラーが発生しました。アプリケーションが常にクラッシュする

DatabaseHelperの私のコードはSQLiteOpenHelper

package com.famiddle.genius.businessmanager; 

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

public class DatabaseHelper extends SQLiteOpenHelper { 

// DECLARING NAME FOR THE DATABASE AND THE TABLE 
public static final String DATABASE_NAME = "imported_items"; 
public static final String TABLE_NAME = "stock"; 

// DECLARING NAME FOR THE COLUMNS 
public static final String COL_1 = "ID"; 
public static final String COL_2 = "ITEMS_NAME"; 
public static final String COL_3 = "QUANTITY"; 
public static final String COL_4 = "COST"; 
public static final String COL_5 = "TOTAL_COST"; 

// DEFAULT CONSTRUCTOR 
public DatabaseHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 
} 

// IT CREATES TABLE 
@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMS_NAME TEXT, QUANTITY INTEGER, COST INTEGER, TOTAL_COST INTEGER"); 
} 

// IT DROPS TABLE, IF IT ALREADY EXISTS 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 
    onCreate(db); //I DON'T KNOW WHY IT IS HERE, PLEASE TELL ME MORE ABOUT 
// IT IN COMMENTS 
} 

// IT INSERTS DATA OR VALUES IN TABLE 
public boolean insertData(String itemsName, int quantity, int cost, int totalCost) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues contentValues = new ContentValues(); 
    contentValues.put(COL_2, itemsName); 
    contentValues.put(COL_3, quantity); 
    contentValues.put(COL_4, cost); 
    contentValues.put(COL_5, totalCost); 
    long result = db.insert(TABLE_NAME, null, contentValues); 
    //db.close(); 
    if (result == -1){ 
     return false; 
    }else {return true;} 
    // return result != -1; 
} 
} 

を拡張し、これはデータベース・インスタンスが と呼ばれ、

public class Stock extends Fragment { 
DatabaseHelper dataBase; 
ArrayList<String> items; 

SharedPreferences prefs; 
SharedPreferences.Editor editor; 

public Stock() { 
    // Required empty public constructor 
} 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.stock, container, false); 

    prefs = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
    editor = prefs.edit(); 
    if(prefs.getBoolean("has_not_created?", true)) { 
     // INITIALIZING ARRAY LIST THAT CONTAINS ITEMS NAME 
     items = new ArrayList<>(); 
     items.add("One"); 
     items.add("Two"); 
     items.add("Three"); 
     items.add("Four"); 
     items.add("Five"); 
     items.add("Six"); 

     // INITIALIZING DATABASE 
     dataBase = new DatabaseHelper(getContext()); 
     // CREATING A LOOP FOR INSERTING ITEMS NAMES ONE BY ONE 
     for (int i = 0; i < items.size(); i++) { 
      Boolean isInserted = dataBase.insertData(items.get(i), 0, 0, 0); 
      Toast.makeText(getActivity(), items.get(i) + " has been inserted into database" + isInserted , Toast.LENGTH_SHORT).show(); 
     } 
     // PUTTING 'FALSE' IN SHARED PREFERENCE OBJECT 
     // THEN IT WILL NOT ALLOW THE CODE TO RUN 
     editor.putBoolean("has_not_created?", false); 
     editor.apply(); 
    } 

を使用している株式のフラグメントのためのコードである誰かが私に教えてくださいすることができています私のコードに何が問題なの?私はAndroidのチュートリアルからそれを学んだ。

+2

クラッシュログを投稿してください。 – Henry

+0

アンドロイドシミュレータの助けを借りてノートパソコンでアプリを実行できません。 –

+0

シミュレータまたは実際のデバイスでapを実行しても、ログカットビューにログが表示されます – shravani

答えて

0

お客様のエラーはonCreate()です。

括弧を開いていますが、どこでも閉じているわけではありません。 だから::

db.execSQL("CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT, ITEMS_NAME TEXT, QUANTITY INTEGER, COST INTEGER, TOTAL_COST INTEGER)"); 
+0

あなたの助けてくれてありがとう! –

+0

あなたは歓迎ですが、実際に[this](https://stackoverflow.com/a/23353174/3505928)を通過する必要があります。それが何であるかを知っていると問題を解決するのが簡単です(: – Kiya

関連する問題