如何从硬编码数据更改为数据库数据?

时间:2018-05-04 13:57:01

标签: android

我正在制作一个“Ive Never”游戏作为学校项目。基本上每次单击按钮时都会出现一个新文本,旧文本会消失。问题是我不知道如何将它连接到DBHelperList。在NeverTheGame.java上,您可以列出您希望在游戏中拥有哪些行。计划是从列表中获取数据并将其放在NeverTheGame.java Anny建议中如何做到这一点? (抱歉我的英语不好)

NeverTheGame.java

public class NeverTheGame extends AppCompatActivity {


int oldValue;
ArrayAdapter<String> mAdapter;

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

}
private void changeTextViewValue() {
    final String[] neverTasks = {
            "Jag har aldrig kollat på anime.",
            "Jag har aldrig stalkat någon på facebook.",
            "Jag har aldrig svimmat.",
            "Jag har aldrig kollat på Disney Channel.",
            "Jag har aldrig varit med på en fest och tänkt för mig själv'Jag är omringad av idioter'.",
            "Jag har aldrig bett om en lönehörhöjning.",
            "Jag har aldrig argumenterat med någon anonym person på internet.",
            "Jag har aldrig försökt ljuga för någon och det gick åt helvete.",
            "Jag har aldrig trott på gud eller nåt liknade."};
    final TextView changeText = (TextView) findViewById(R.id.neverText);
    Button changeTextButton = (Button) findViewById(R.id.neverButton);
    changeText.startAnimation(AnimationUtils.loadAnimation(NeverTheGame.this, android.R.anim.slide_in_left));

    changeTextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int random = (int) (Math.random() * neverTasks.length);
            if(random == oldValue){
                random = (int) (Math.random() * neverTasks.length);
            }
            changeText.setText(neverTasks[random]);
            oldValue = random;
        }
    });
};
private void changeTextOnce(){
    final TextView changeText = (TextView) findViewById(R.id.neverText);
    Button changeTextButton = (Button)findViewById(R.id.neverButton);
    changeTextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            changeText.setText("Go hard!");
        }
    });
}
}

IveNever.java

import java.util.ArrayList;

public class IveNever extends AppCompatActivity {

ListView lstTask;
private Button playTheGame;
private Button howTo;
ArrayAdapter<String> mAdapter;
DbHelperList dbHelper;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ive_never);
    dbHelper = new DbHelperList(this);
    lstTask = (ListView)findViewById(R.id.lstTask);
    loadTaskList();
    howTo = (Button) findViewById(R.id.iveNeverHowBtn);
    howTo.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent go1 = new Intent(IveNever.this, NeverWeb.class);
            startActivity(go1);
        }
    });

    playTheGame = (Button) findViewById(R.id.playGameBtn);
    playTheGame.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent go2 = new Intent(IveNever.this, NeverTheGame.class);
            startActivity(go2);
        }
    });
}

public void loadTaskList() {
    ArrayList<String> taskList = dbHelper.getTaskList();
    if(mAdapter==null){
        mAdapter = new ArrayAdapter<String>(this,R.layout.createlinerow,R.id.task_title,taskList);
        lstTask.setAdapter(mAdapter);
    }
    else{
        mAdapter.clear();
        mAdapter.addAll(taskList);
        mAdapter.notifyDataSetChanged();
    }
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.add,menu);
    //Change menu icon color
    Drawable icon = menu.getItem(0).getIcon();
    icon.mutate();
    icon.setColorFilter(getResources().getColor(android.R.color.white), PorterDuff.Mode.SRC_IN);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()){
        case R.id.action_add_task:
            final EditText taskEditText = new EditText(this);
            AlertDialog dialog = new AlertDialog.Builder(this)
                    .setTitle("Add A New Line ")
                    .setMessage("I´ve never.....")
                    .setView(taskEditText)
                    .setPositiveButton("Add", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            String task = String.valueOf(taskEditText.getText());
                            dbHelper.insertNewTask(task);
                            loadTaskList();
                        }
                    })
                    .setNegativeButton("Cancel",null)
                    .create();

            dialog.show();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

public void deleteTask(View view){
    View parent = (View)view.getParent();
    TextView taskTextView = (TextView)parent.findViewById(R.id.task_title);
    Log.e("String", (String) taskTextView.getText());
    String task = String.valueOf(taskTextView.getText());
    dbHelper.deleteTask(task);
    loadTaskList();
}
}

DBHelperList.java

public class DbHelperList extends SQLiteOpenHelper {

private static final String DB_NAME="EDMTDev";
private static final int DB_VER = 1;
public static final String DB_TABLE="Task";
public static final String DB_COLUMN = "TaskName";

public DbHelperList(Context context) {
    super(context, DB_NAME, null, DB_VER);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",DB_TABLE,DB_COLUMN);
    db.execSQL(query);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
    db.execSQL(query);
    onCreate(db);

}

public void insertNewTask(String task){
    SQLiteDatabase db= this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(DB_COLUMN,task);
    db.insertWithOnConflict(DB_TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE);
    db.close();
}

public void deleteTask(String task){
    SQLiteDatabase db = this.getWritableDatabase();
    db.delete(DB_TABLE,DB_COLUMN + " = ?",new String[]{task});
    db.close();
}

public ArrayList<String> getTaskList(){
    ArrayList<String> taskList = new ArrayList<>();
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(DB_TABLE,new String[]{DB_COLUMN},null,null,null,null,null);
    while(cursor.moveToNext()){
        int index = cursor.getColumnIndex(DB_COLUMN);
        taskList.add(cursor.getString(index));
    }
    cursor.close();
    db.close();
    return taskList;
}
}

2 个答案:

答案 0 :(得分:0)

将数据插入数据库:

@Override
public void onCreate(SQLiteDatabase db) {
    String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);", DB_TABLE, DB_COLUMN);
    db.execSQL(query);
    insertAll(db);
}

private void insertAll(SQLiteDatabase db) {
   ContentValues values = new ContentValues();
   for (String neverTask : neverTasks) {
       values.put(DB_COLUMN, neverTask);
       long rowId = db.insert(DB_TABLE, null, values);
       if (rowId != -1) {
           Log.i("insertAll", "Inserted: " + neverTask);
       } else {
           Log.w("insertAll", "failure: " + neverTask);
       }
       // values.clear();
    }
}
  • 如果成功(1,2,3,...)
  • ,则返回行ID
  • 必须卸载并重新安装应用才能插入数据
  • 要将数据插入现有数据库,请将DB_VER更改为2并从onUpgrade()调用insertAll
  • 要将数据插入单独的表中,请添加到onCreate:
    final String createTable2 = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);", DB_TABLE2, DB_TABLE2_COLUMN);
    db.execSQL(createTable2);

答案 1 :(得分:0)

由于某种原因,应用程序崩溃了。这是我的代码。

DbHelperList.java

public class DbHelperList extends SQLiteOpenHelper {

private static final String DB_NAME="EDMTDev";
private static final int DB_VER = 1;
public static final String DB_TABLE="Task";
public static final String DB_COLUMN = "TaskName";
String[] neverTasks;

public DbHelperList(Context context) {
    super(context, DB_NAME, null, DB_VER);
}

@Override
public void onCreate(SQLiteDatabase db) {
    String query = String.format("CREATE TABLE %s (ID INTEGER PRIMARY KEY AUTOINCREMENT,%s TEXT NOT NULL);",DB_TABLE,DB_COLUMN);
    db.execSQL(query);
    insertAll(db);
}

private void insertAll(SQLiteDatabase db) {
    ContentValues values = new ContentValues();

    for (String neverTask : neverTasks) {
        values.put(DB_COLUMN, neverTask);
        long rowId = db.insert(DB_TABLE, null, values);
        if (rowId != -1) {
            Log.i("insertAll", "Inserted: " + neverTask);
        } else {
            Log.w("insertAll", "failure: " + neverTask);
        }
        // values.clear();
    }
}


@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String query = String.format("DELETE TABLE IF EXISTS %s",DB_TABLE);
    db.execSQL(query);
    onCreate(db);
    insertAll(db);

}

NeverTheGame.java

  int oldValue;
ArrayAdapter<String> mAdapter;

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

}
private void changeTextViewValue() {
    final String[] neverTasks = {
          /*  "Jag har aldrig kollat på anime.",
            "Jag har aldrig stalkat någon på facebook.",
            "Jag har aldrig svimmat.",
            "Jag har aldrig kollat på Disney Channel.",
            "Jag har aldrig varit med på en fest och tänkt för mig själv'Jag är omringad av idioter'.",
            "Jag har aldrig bett om en lönehörhöjning.",
            "Jag har aldrig argumenterat med någon anonym person på internet.",
            "Jag har aldrig försökt ljuga för någon och det gick åt helvete.",
            "Jag har aldrig trott på gud eller nåt liknade."*/};
    final TextView changeText = (TextView) findViewById(R.id.neverText);
    Button changeTextButton = (Button) findViewById(R.id.neverButton);
    changeText.startAnimation(AnimationUtils.loadAnimation(NeverTheGame.this, android.R.anim.slide_in_left));

    changeTextButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            int random = (int) (Math.random() * neverTasks.length);
            if(random == oldValue){
                random = (int) (Math.random() * neverTasks.length);
            }
            changeText.setText(neverTasks[random]);
            oldValue = random;
        }
    });
};

如果我做错了,请纠正我。