2013-04-17 80 views
0

我對Android和java完全陌生。之前曾在vb.net工作過。我正在嘗試創建一個vb.net應用程序的Android版本。 Android中的數據庫功能正在殺死我。這裏是我需要做的簡短描述。 - 創建一個「項目」數據庫,其中包含項目的單個記錄。我需要從這些記錄中添加,更新,刪除和檢索數據。 - 創建一個「環境」數據庫,用於存放環境變量(溫度,高程等等,以及當前正在使用的項目數據庫中的項目),我將需要更新此記錄Android數據庫 - 遊標返回錯誤

我看了幾個教程,並試圖模仿它們,在我的代碼中似乎都是正確的,但是我明確指出了遊標函數的錯誤(其他錯誤也是,但這似乎是它的根源)。問題,讓我們從環境數據庫開始,我創建了一個SQLHelper,數據庫管理器和一個活動來與它交互,這三個都在這裏提出。 o有更具體的問題,但經過3天的嘗試與其他帖子等比較,我完全失去了。感謝任何能夠幫助我的人!

HELPER 
package com.becrs.becrsmobile; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class EnvironmentSQLiteHelper extends SQLiteOpenHelper { 

    public static final String TABLE_Environment = "envVar"; 
    public static final String ENV_COLUMN_ID = "_id"; 
    public static final String COLUMN_elevation = "elevation"; 
    public static final String COLUMN_temperature = "temperature"; 
    public static final String COLUMN_ScopeIncrement = "ScopeIncrement"; 
    public static final String COLUMN_R1_Var = "R1_Var"; 
    public static final String COLUMN_R2_Var = "R2_Var"; 
    public static final String COLUMN_R3_Var = "R3_Var"; 
    public static final String COLUMN_R4_Var = "R4_Var"; 
    public static final String COLUMN_R5_Var = "R5_Var"; 
    public static final String COLUMN_R6_Var = "R6_Var"; 
    public static final String COLUMN_R7_Var = "R7_Var"; 
    public static final String COLUMN_R8_Var = "R8_Var"; 
    public static final String COLUMN_R9_Var = "R9_Var"; 
    public static final String COLUMN_MaxRange_Var = "MaxRange_Var"; 
    public static final String COLUMN_currentCartridge = "currentCartridge"; 

    private static final String DATABASE_NAME = "environmentdb.db"; 
    private static final int DATABASE_VERSION = 1; 

    // Database creation sql statement 
    private static final String DATABASE_CREATE = "create table " 
     + TABLE_Environment + " (" + ENV_COLUMN_ID + " integer primary key autoincrement not null," 
     + COLUMN_elevation + " INTEGER, " 
     + COLUMN_ScopeIncrement + " REAL, " 
     + COLUMN_R1_Var + " INTEGER, " 
     + COLUMN_R2_Var + " INTEGER, " 
     + COLUMN_R3_Var + " INTEGER, " 
     + COLUMN_R4_Var + " INTEGER, " 
     + COLUMN_R5_Var + " INTEGER, " 
     + COLUMN_R6_Var + " INTEGER, " 
     + COLUMN_R7_Var + " INTEGER, " 
     + COLUMN_R8_Var + " INTEGER, " 
     + COLUMN_R9_Var + " INTEGER, " 
     + COLUMN_MaxRange_Var + " INTEGER, " 
     + COLUMN_currentCartridge + " INTEGER" 
     + ");"; 

    public EnvironmentSQLiteHelper(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase database) { 
    database.execSQL(DATABASE_CREATE); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    Log.w(EnvironmentSQLiteHelper.class.getName(), 
     "Upgrading database from version " + oldVersion + " to " 
      + newVersion + ", which will destroy all old data"); 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_Environment); 
    onCreate(db); 
    } 

} 

DATABASE MANAGER 
package com.becrs.becrsmobile; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.ContentValues; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.util.Log; 

public class EnvironmentDataSource { 

    // Database fields 
    private SQLiteDatabase database; 
    private EnvironmentSQLiteHelper dbHelper; 
    private String[] allColumns = { 
     EnvironmentSQLiteHelper.ENV_COLUMN_ID, 
     EnvironmentSQLiteHelper.COLUMN_elevation, 
     EnvironmentSQLiteHelper.COLUMN_temperature, 
     EnvironmentSQLiteHelper.COLUMN_ScopeIncrement, 
     EnvironmentSQLiteHelper.COLUMN_R1_Var, 
     EnvironmentSQLiteHelper.COLUMN_R2_Var, 
     EnvironmentSQLiteHelper.COLUMN_R3_Var, 
     EnvironmentSQLiteHelper.COLUMN_R4_Var, 
     EnvironmentSQLiteHelper.COLUMN_R5_Var, 
     EnvironmentSQLiteHelper.COLUMN_R6_Var, 
     EnvironmentSQLiteHelper.COLUMN_R7_Var, 
     EnvironmentSQLiteHelper.COLUMN_R8_Var, 
     EnvironmentSQLiteHelper.COLUMN_R9_Var, 
     EnvironmentSQLiteHelper.COLUMN_MaxRange_Var, 
     EnvironmentSQLiteHelper.COLUMN_currentCartridge, 
     }; 

    public EnvironmentDataSource(Context context) { 
    dbHelper = new EnvironmentSQLiteHelper(context); 
    } 

    public void open() throws SQLException { 
    database = dbHelper.getWritableDatabase(); 
    } 

    public void close() { 
    dbHelper.close(); 
    } 
    public Environment updateEnvironment(int elevation, int temperature, Double ScopeIncrement, int R1, int R2, int R3, int R4, int R5, int R6, int R7, int R8, int R9, int MaxRng, int currentCartridge) { 
     ContentValues values = new ContentValues(); 
     values.put(EnvironmentSQLiteHelper.COLUMN_elevation, elevation); 
     values.put(EnvironmentSQLiteHelper.COLUMN_temperature, temperature); 
     values.put(EnvironmentSQLiteHelper.COLUMN_ScopeIncrement, ScopeIncrement); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R1_Var, R1); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R2_Var, R2); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R3_Var, R3); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R4_Var, R4); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R5_Var, R5); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R6_Var, R6); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R7_Var, R7); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R8_Var, R8); 
     values.put(EnvironmentSQLiteHelper.COLUMN_R9_Var, R9); 
     values.put(EnvironmentSQLiteHelper.COLUMN_MaxRange_Var, MaxRng); 
     values.put(EnvironmentSQLiteHelper.COLUMN_currentCartridge, currentCartridge); 
     long insertID; 
     try { 
      database.update(EnvironmentSQLiteHelper.TABLE_Environment, values, "_id = 0 ", allColumns); 
      insertID = 0; 
     } 
     catch (Exception e){ 
      insertID = database.insert(EnvironmentSQLiteHelper.TABLE_Environment, null, values); 
     } 
     Cursor cursor = database.query(EnvironmentSQLiteHelper.TABLE_Environment, 
       allColumns, EnvironmentSQLiteHelper.ENV_COLUMN_ID + " = " + insertID, null, 
       null, null, null, null); 
     cursor.moveToFirst(); 
     Environment newEnvironment = cursorToEnvironment(cursor); 
     cursor.close(); 
     return newEnvironment; 
     } 

    public Environment getEnvironment() { 
     Cursor cursor = null; 
     try { 
      cursor = database.query(EnvironmentSQLiteHelper.TABLE_Environment, 
       allColumns, EnvironmentSQLiteHelper.ENV_COLUMN_ID + " = 0", allColumns, null, null, null, null); 
     } 
     catch (SQLException e) 
    { 
     Log.e("DB ERROR", e.toString()); 
     e.printStackTrace(); 
    } 
     Environment environment = null; 
     if (cursor.moveToFirst()){ 
      environment = cursorToEnvironment(cursor); 
     } 
     cursor.close(); 
     return environment; 
     } 
    private Environment cursorToEnvironment(Cursor cursor) { 
    Environment environment = new Environment(); 
    environment.setelevation(cursor.getInt(0)); 
    environment.settemperature(cursor.getInt(1)); 
    environment.setlongRangeScopeIncrement(cursor.getDouble(2)); 
    environment.setR1_Var(cursor.getInt(3)); 
    environment.setR2_Var(cursor.getInt(4)); 
    environment.setR3_Var(cursor.getInt(5)); 
    environment.setR4_Var(cursor.getInt(6)); 
    environment.setR5_Var(cursor.getInt(7)); 
    environment.setR6_Var(cursor.getInt(8)); 
    environment.setR7_Var(cursor.getInt(9)); 
    environment.setR8_Var(cursor.getInt(10)); 
    environment.setR9_Var(cursor.getInt(11)); 
    environment.setMaxRange_Var(cursor.getInt(12)); 
    environment.setcurrentCartridge(cursor.getString(13)); 
    return environment; 
    } 
} 

INTERFACE ACTIVITY 
package com.becrs.becrsmobile; 


import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 


public class EnvironmentEditActivity extends Activity 
{ 
    private EnvironmentDataSource datasource; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_editenvironment); 
     datasource = new EnvironmentDataSource(this); 
     datasource.open(); 
     Button save = (Button)findViewById(R.id.ButtonSaveEnvironment);  
     save.setOnClickListener(startsaveListener); 
     Environment environment = datasource.getEnvironment(); 
     String TempVal; 
     TextView mTextView; 
     TempVal = Integer.toString(environment.getelevation()); 
     mTextView = (TextView) findViewById(R.id.input_Elevation); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.gettemperature()); 
     mTextView = (TextView) findViewById(R.id.input_Temperature); 
     mTextView.setText(TempVal); 
     TempVal = Double.toString(environment.getlongRangeScopeIncrement()); 
     mTextView = (TextView) findViewById(R.id.input_ClickIncrement); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR1_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R1); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR2_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R2); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR3_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R3); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR4_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R4); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR5_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R5); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR6_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R6); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR7_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R7); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR8_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R8); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getR9_Var()); 
     mTextView = (TextView) findViewById(R.id.input_R9); 
     mTextView.setText(TempVal); 
     TempVal = Integer.toString(environment.getMaxRange_Var()); 
     mTextView = (TextView) findViewById(R.id.input_MaxRng); 
     mTextView.setText(TempVal); 
    }  
     private OnClickListener startsaveListener = new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       EditText elevation = (EditText)findViewById(R.id.input_Elevation); 
       int elevationVal = Integer.parseInt(elevation.getText().toString()); 
       EditText temperature = (EditText)findViewById(R.id.input_Temperature); 
       int temperatureVal = Integer.parseInt(temperature.getText().toString()); 
       EditText clickIncrement = (EditText)findViewById(R.id.input_ClickIncrement); 
       Double clickIncrementVal = Double.parseDouble(clickIncrement.getText().toString()); 
       EditText R1 = (EditText)findViewById(R.id.input_R1); 
       int R1Val = Integer.parseInt(R1.getText().toString()); 
       EditText R2 = (EditText)findViewById(R.id.input_R2); 
       int R2Val = Integer.parseInt(R2.getText().toString()); 
       EditText R3 = (EditText)findViewById(R.id.input_R3); 
       int R3Val = Integer.parseInt(R3.getText().toString()); 
       EditText R4 = (EditText)findViewById(R.id.input_R4); 
       int R4Val = Integer.parseInt(R4.getText().toString()); 
       EditText R5 = (EditText)findViewById(R.id.input_R5); 
       int R5Val = Integer.parseInt(R5.getText().toString()); 
       EditText R6 = (EditText)findViewById(R.id.input_R6); 
       int R6Val = Integer.parseInt(R6.getText().toString()); 
       EditText R7 = (EditText)findViewById(R.id.input_R7); 
       int R7Val = Integer.parseInt(R7.getText().toString()); 
       EditText R8 = (EditText)findViewById(R.id.input_R8); 
       int R8Val = Integer.parseInt(R8.getText().toString()); 
       EditText R9 = (EditText)findViewById(R.id.input_R9); 
       int R9Val = Integer.parseInt(R9.getText().toString()); 
       EditText MaxRng = (EditText)findViewById(R.id.input_MaxRng); 
       int MaxRngVal = Integer.parseInt(MaxRng.getText().toString()); 
       int RecordNum = 0; 
       datasource.updateEnvironment(elevationVal, temperatureVal, clickIncrementVal, R1Val, R2Val, R3Val, R4Val, R5Val, R6Val, R7Val, R8Val, R9Val, MaxRngVal, RecordNum); 
       setResult(RESULT_OK); 
       finish(); 
      } 
     }; 


    @Override 
    protected void onResume() { 
     datasource.open(); 
     super.onResume(); 
    } 

    @Override 
    protected void onPause() { 
     datasource.close(); 
     super.onPause(); 
    } 

} 

環境對象

package com.becrs.becrsmobile; 

public class Environment { 
    private static int elevation; 
    private static int temperature; 
    private static Double longRangeScopeIncrement; 
    private static int R0_Var; 
    private static int R1_Var; 
    private static int R2_Var; 
    private static int R3_Var; 
    private static int R4_Var; 
    private static int R5_Var; 
    private static int R6_Var; 
    private static int R7_Var; 
    private static int R8_Var; 
    private static int R9_Var; 
    private static int MaxRange_Var; 
    private static int currentCartridge; 
    public static int getelevation() { 
     return elevation; 
    } 
    public void setelevation(int elevation) { 
     Environment.elevation = elevation; 
    } 
    public static int gettemperature() { 
     return temperature; 
    } 
    public void settemperature(int temperature) { 
     Environment.temperature = temperature; 
    } 
    public static double getlongRangeScopeIncrement() { 
     return longRangeScopeIncrement; 
    } 
    public void setlongRangeScopeIncrement(Double longRangeScopeIncrement) { 
     Environment.longRangeScopeIncrement = longRangeScopeIncrement; 
    } 
    public static int getR0_Var() { 
     return R0_Var; 
    } 
    public void setR0_Var(int R0_Var) { 
     Environment.R0_Var = R0_Var; 
    } 
    public static int getR1_Var() { 
     return R1_Var; 
    } 
    public void setR1_Var(int R1_Var) { 
     Environment.R1_Var =R1_Var; 
    } 
    public static int getR2_Var() { 
     return R2_Var; 
    } 
    public void setR2_Var(int R2_Var) { 
     Environment.R2_Var = R2_Var; 
    } 
    public static int getR3_Var() { 
     return R3_Var; 
    } 
    public void setR3_Var(int R3_Var) { 
     Environment.R3_Var = R3_Var; 
    } 
    public static int getR4_Var() { 
     return R4_Var; 
    } 
    public void setR4_Var(int R4_Var) { 
     Environment.R4_Var = R4_Var; 
    } 
    public static int getR5_Var() { 
     return R5_Var; 
    } 
    public void setR5_Var(int R5_Var) { 
     Environment.R5_Var = R5_Var; 
    } 
    public static int getR6_Var() { 
     return R6_Var; 
    } 
    public void setR6_Var(int R6_Var) { 
     Environment.R6_Var = R6_Var; 
    } 
    public static int getR7_Var() { 
     return R7_Var; 
    } 
    public void setR7_Var(int R7_Var) { 
     Environment.R7_Var = R7_Var; 
    } 
    public static int getR8_Var() { 
     return R8_Var; 
    } 
    public void setR8_Var(int R8_Var) { 
     Environment.R8_Var = R8_Var; 
    } 
    public static int getR9_Var() { 
     return R9_Var; 
    } 
    public void setR9_Var(int R9_Var) { 
     Environment.R9_Var = R9_Var; 
    } 
    public static int getMaxRange_Var() { 
     return MaxRange_Var; 
    } 
    public void setMaxRange_Var(int MaxRange_Var) { 
     Environment.MaxRange_Var = MaxRange_Var; 
    } 
    public static int getcurrentCartridge() { 
     return currentCartridge; 
    } 
    public void setcurrentCartridge(int currentCartridge) { 
     Environment.currentCartridge = currentCartridge; 
    } 
} 
+0

你做什麼嘗試在getEnvironmen中進行查詢T'你的查詢是錯誤的。 –

回答

0

首先創建環境對象,因爲它是你的sqlliteopen幫手與上下文實例

Environment environment=new Environment(context); 

然後

Environment env= environment.getEnvironment(); 
+0

我確實創建了Environment對象(忘記放在上面,現在添加)。我在哪裏插入你在說什麼?在HELPER代碼中?謝謝!! –

+0

@ShannonHinkle你需要從環境對象獲得環境,我忘了在答案中提到,檢查編輯 – Pragnani

+0

謝謝!我仍然試圖弄清楚我需要把你的建議放在哪裏。 –