2016-08-07 24 views
0

Ich habe mehrere verschiedene Videos und Fragen hier über ähnliche Probleme angeschaut und mein Code scheint in Ordnung zu sein, aber kann einfach nicht herausfinden, warum es einen Fehler beim Kompilieren onCreate in meiner Datenbank-Klasse hat.Fehler beim Aufruf der onCreate-Datenbank. Android Studios

Ich versuche nur eine Zeile zu erstellen und der Datenbank hinzuzufügen. Diese

ist die MainActivity

public class MainActivity extends AppCompatActivity { 
    EditText First, Last, Make, Model, Cost; 

Button Add; 
Context dx = this; 
DatabaseOps mydb; 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    mydb = new DatabaseOps(this); 

    First = (EditText) findViewById(R.id.First_Name); 
    Last = (EditText) findViewById(R.id.Last_Name); 
    Make = (EditText) findViewById(R.id.Car_Make); 
    Model = (EditText) findViewById(R.id.Car_Model); 
    Cost = (EditText) findViewById(R.id.Car_Cost); 
    Add = (Button) findViewById(R.id.add); 
    addData(); 

} 
public void addData() 
{ 
    Add.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
      boolean ifInserted = mydb.InsertData(First.getText().toString(), 
        Last.getText().toString(), 
        Make.getText().toString(), 
        Model.getText().toString(), 
        Cost.getText().toString()); 
      if (ifInserted == true) { 
       Toast.makeText(getBaseContext(), "Successful entry", Toast.LENGTH_LONG).show(); 
      } else { 
       Toast.makeText(getBaseContext(), "UnSuccessful entry TRY AGAIN", Toast.LENGTH_LONG).show(); 
      } 
     } 


    }); 
} 

}

Dies ist die Datenbank-Klasse

public class DatabaseOps extends SQLiteOpenHelper 
{ 

public static final String ID = "ID"; 
public static final String CUSTOMER_FIRST_NAME = "Customer First Name"; 
public static final String CUSTOMER_LAST_NAME = "Customer Last Name"; 
public static final String CAR_MAKE = "Car Make"; 
public static final String CAR_MODEL = "Car Model"; 
public static final String COST = "Cost"; 
public static final String DATABASE_NAME = "CAR_DEALER.db"; 
public static final String Table_name = "CUSTOMER_TABLE"; 
public static final String Table_create = "create table"+ Table_name + "(" + 
     ID + "INTEGER PRIMARY KEY AUTOINCREMENT"+ 
     CUSTOMER_FIRST_NAME +"TEXT" + 
     CUSTOMER_LAST_NAME +"TEXT" + 
     CAR_MAKE +"TEXT" + 
     CAR_MODEL +"TEXT" + 
     COST +"Integer" 
     +")"; 



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

    Log.d("DatabaseOps", "Success Database created!"); 
} 

@Override 
public void onCreate(SQLiteDatabase db) 
{ 

    db.execSQL(Table_create); 
    Log.d("DatabaseOps", "Success Table created!"); 


} 

@Override 
public void onUpgrade(SQLiteDatabase db, int i, int i1) 
{ 
    db.execSQL("Drop Table IF Exists" +Table_name); 
    onCreate(db); 
} 

public boolean InsertData (String First, String Last, String Make, String Model, String Cost) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv = new ContentValues(); 
    cv.put(CUSTOMER_FIRST_NAME, First); 
    cv.put(CUSTOMER_LAST_NAME, Last); 
    cv.put(CAR_MAKE, Make); 
    cv.put(CAR_MODEL, Model); 
    cv.put(COST, Cost); 
    Long result = db.insert(Table_name, null, cv); 
    if(result == -1) 
    { 
     return false; 
    } 
    else 
    { 
     return true; 
    } 
} 


} 

Ich dachte, es könnte ein Problem mit der Manifest-Datei der Datenbank-Klasse nicht initialisiert, Das Manifest gibt jedoch an, dass in der Klasse kein Standardkonstruktor vorhanden ist.

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name="MainActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 




    </application> 

Antwort

1

Ihr Problem vollständig mit dem Inhalt Table_create und Spaltennamen ist.

Zuerst benötigen Sie Leerzeichen zwischen Schlüsselwörtern und Werten. "create table" + Table_name wird in "create tableCUSTOMER_TABLE" aufgelöst.

Zweitens sollten Sie keine Leerzeichen in Ihre Spaltennamen einfügen. Also statt "Car Model" zB "Car_Model" verwenden.

Es hilft, nur um die Zeichenfolge zu drucken. Weitere Informationen finden Sie unter create-table-stmt.

+0

Sie brauchen auch Kommas nach jedem Typ. –