2017-02-18 85 views
1

這個應用程序能夠運行,但它不能打印數據庫中的數據, 我也不知道數據是否能夠插入或不能。初學者級別的SQLite Android應用程序沒有打印結果

這是MainActivity.java

package com.zikri.sqlitetuto3; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

EditText dataET; 
Button addB, delB; 
TextView dataTV; 
MyDBHandler dbHandler; 
String getProduct; 
Products products; 

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

public void startAndroidApp(){ 
    dbHandler = new MyDBHandler(this,null,null,1); 
    dataET = (EditText) findViewById(R.id.dataET); 
    addB = (Button) findViewById(R.id.addB); 
    delB = (Button) findViewById(R.id.delB); 
    dataTV = (TextView) findViewById(R.id.dataTV); 

    getProduct = dataET.getText().toString(); 

    PrintProduct(); 

    addB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      AddProduct(getProduct); 
     } 
    }); 

    delB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      DelProduct(getProduct); 
     } 
    }); 


} 

public void PrintProduct(){ 
    dataTV.setText(dbHandler.PrintProduct()); 
    dataET.setText(""); 
} 

public void AddProduct(String p){ 
    products = new Products(p); 
    dbHandler.AddProduct(products); 
    PrintProduct(); 
} 

public void DelProduct(String p){ 
    dbHandler.DelProduct(p); 
    PrintProduct(); 
    } 
} 

這是MyDBHandler.java

package com.zikri.sqlitetuto3; 

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


public class MyDBHandler extends SQLiteOpenHelper { 

private static final int DATABASE_VERSION = 1; 
private static final String DATABASE_NAME = "products.db"; 
private static final String PRODUCT_TABLE = "product"; 
private static final String COL_ID = "id"; 
private static final String COL_PRODUCTNAME = "product_name"; 

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

@Override 
public void onCreate(SQLiteDatabase db){ 
    String query = "CREATE TABLE "+PRODUCT_TABLE+" ("+ 
        COL_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, "+ 
        COL_PRODUCTNAME+" TEXT"+");"; 
    db.execSQL(query); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){ 
    String query = "DROP IF EXIST "+PRODUCT_TABLE; 
    db.execSQL(query); 
    onCreate(db); 
} 

public void AddProduct(Products products){ 
    SQLiteDatabase db = getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(COL_PRODUCTNAME,products.get_productname()); 
    db.insert(PRODUCT_TABLE,null,values); 
    db.close(); 
} 

public void DelProduct(String product){ 
    SQLiteDatabase db = getWritableDatabase(); 
    String query = "DELETE FROM "+PRODUCT_TABLE+ 
        "WHERE "+COL_PRODUCTNAME+" = "+product+";"; 
    db.execSQL(query); 
    db.close(); 
} 

public String PrintProduct(){ 
    SQLiteDatabase db = getWritableDatabase(); 
    String printproductstring = ""; 
    String query = "SELECT * FROM "+PRODUCT_TABLE+";"; 
    Cursor cur = db.rawQuery(query,null); 

    cur.moveToFirst(); 

    while(cur.moveToNext()){ 
    printproductstring = 
    printproductstring+cur.getString(cur.getColumnIndex("product_name")); 
    printproductstring = printproductstring + "\n"; 
    } 
    db.close(); 
    return printproductstring; 
    } 
} 

這是Product.java

package com.zikri.sqlitetuto3; 

public class Products { 

private int _ID; 
private String _productname; 

public Products() {} 
public Products(String productname) { 
    this._productname = productname; 
} 

public void set_ID(int _ID) { 
    this._ID = _ID; 
} 
public int get_ID() { 
    return _ID; 
} 

public void set_productname(String _productname) { 
    this._productname = _productname; 
} 

public String get_productname() { 
    return _productname; 
} 

} 

這是activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android= 
"http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
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" 
tools:context="com.zikri.sqlitetuto3.MainActivity"> 

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName" 
    android:ems="10" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/dataET" /> 

<Button 
    android:text="INSERT" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/dataET" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/addB" /> 

<Button 
    android:text="Delete" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/addB" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:id="@+id/delB" /> 

<TextView 
    android:text="TextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/dataTV" /> 

回答

0

你應該輸入時buttonclicked否則getProduct永遠是空的

addB.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      getProduct = dataET.getText().toString(); 
      // ^^^ fetch value when button is clicked 
      AddProduct(getProduct); 
     } 
    }); 

,做同樣的,同時刪除

delB.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     getProduct = dataET.getText().toString(); 
     // ^^^ fetch value when button is clicked 
     DelProduct(getProduct); 
    } 
}); 

而且可以確認成功插入數據由return valueinsertlong類型定義爲

新插入的行的行號,或-1,如果發生錯誤

所以用它

long id = db.insert(PRODUCT_TABLE,null,values); 
// you can now check the value of id through Logs or Toast 
db.close(); 
0

它,它看到Android的數據庫stoered非常困難或如果沒有錯誤意味着它被存儲,但不是每次都是你可以看到ecror。如果你想仍然必須在devide管理器中看到它的困難另一種解決方案是通過一個紮根的移動和內部根bouser去android文件夾內的android文件夾去到達達裏再次去數據,然後你的包名然後數據庫,然後看到有任何文件與您的數據庫相關的名稱複製到PC並下載sqllite brouser。這個漫長的過程,你可以做到100%的機會獲得數據庫file.if它是創建