我的SQLite代码有问题。我正在使用Fragment以横向模式获取我的电影细节。但现在每次我点击我的电影名称,它都没有显示电影的细节。
这是我的DatabaseHandler代码:
package com.example.moviemanager;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DatabaseHandler {
String cmd;
private static final String DBTAG = "DatabaseHandler";
public static final String KEY_ROWID = "_id";
public static final int COL_ROWID = 0;
public static final String KEY_KEY = "key";
public static final String KEY_TITLE = "title";
public static final String KEY_TYPE = "type";
public static final String KEY_STORY = "story";
public static final String KEY_RATING = "rating";
public static final String KEY_LANGUAGE = "language";
public static final String KEY_RUNTIME = "runtime";
public static final int COL_KEY = 1;
public static final int COL_TITLE = 2;
public static final int COL_TYPE = 3;
public static final int COL_STORY = 4;
public static final int COL_RATING = 5;
public static final int COL_LANGUAGE = 6;
public static final int COL_RUNTIME = 7;
public static final String[] ALL_KEYS = new String[] {
KEY_ROWID, KEY_KEY, KEY_TITLE, KEY_TYPE, KEY_STORY,
KEY_RATING, KEY_LANGUAGE, KEY_RUNTIME};
public static final String DATABASE_NAME = "movieDb";
public static final String DATABASE_TABLE = "movieTable";
public static final int DATABASE_VERSION = 1;
private static final String DATABASE_CREATE_SQL =
"create table " + DATABASE_TABLE
+ " (" + KEY_ROWID + " integer primary key autoincrement,"
+ KEY_KEY + " text not null,"
+ KEY_TITLE + " text not null,"
+ KEY_TYPE + " text not null,"
+ KEY_STORY + " text not null,"
+ KEY_RATING + " text not null,"
+ KEY_LANGUAGE + " text not null,"
+ KEY_RUNTIME + " integer not null"
+ ");";
private final Context context;
private DatabaseHelper dbHelper;
private SQLiteDatabase db;
public DatabaseHandler(Context ctx){
this.context = ctx;
dbHelper = new DatabaseHelper(context);
}
public DatabaseHandler open(){
db = dbHelper.getWritableDatabase();
return this;
}
public void close(){
dbHelper.close();
}
public void insertRow(String mvkey, String mvtitle, String mvtype,
String mvstory, String mvrating, String mvlanguage, int mvruntime){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_KEY, mvkey);
initialValues.put(KEY_TITLE, mvtitle);
initialValues.put(KEY_TYPE, mvtype);
initialValues.put(KEY_STORY, mvstory);
initialValues.put(KEY_RATING, mvrating);
initialValues.put(KEY_LANGUAGE, mvlanguage);
initialValues.put(KEY_RUNTIME, mvruntime);
open();
db.insert(DATABASE_TABLE, null, initialValues);
close();
}
public void deleteRow(long rowId){
open();
cmd = new String ("DELETE FROM " + DATABASE_TABLE + " WHERE ( "+KEY_ROWID+" =" + rowId + " );");
db.execSQL(cmd);
close();
}
public void deleteAll(){
Cursor c = getAllRows();
long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
if(c.moveToFirst()){
do{
deleteRow(c.getLong((int)rowId));
}while(c.moveToNext());
}
c.close();
}
public Cursor getAllRows(){
String where = null;
Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
if(c!= null){
c.moveToFirst();
}
return c;
}
public Cursor getRow(long rowId){
String where = KEY_ROWID + "=" + rowId;
Cursor c = db.query(true, DATABASE_TABLE, ALL_KEYS, where, null, null, null, null, null);
if(c!= null){
c.moveToFirst();
}
return c;
}
public boolean updateRow(long rowId, String mvkey, String mvtitle,
String mvtype, String mvstory, String mvrating,
String mvlanguage, int mvruntime){
String where = KEY_ROWID + "=" + rowId;
ContentValues newValues = new ContentValues();
newValues.put(KEY_KEY, mvkey);
newValues.put(KEY_TITLE, mvtitle);
newValues.put(KEY_TYPE, mvtype);
newValues.put(KEY_STORY, mvstory);
newValues.put(KEY_RATING, mvrating);
newValues.put(KEY_LANGUAGE, mvlanguage);
newValues.put(KEY_RUNTIME, mvruntime);
return db.update(DATABASE_TABLE, newValues, where, null) != 0;
}
public Cursor listMovieTitle(){
return db.rawQuery("SELECT "+ KEY_TITLE + " FROM " + DATABASE_TABLE,null);
}
public Cursor get_id(String ttl){
return db.rawQuery("SELECT "+ KEY_ROWID + " FROM " + DATABASE_TABLE + " WHERE (" + KEY_TITLE + " = " + ttl + " );",null);
}
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context){
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase _db) {
_db.execSQL(DATABASE_CREATE_SQL);
}
@Override
public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
Log.w(DBTAG, "Upgrading application's database from version " + oldVersion
+ " to " + newVersion + ", which will destroy all old data!");
// Destroy old database:
_db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);
// Recreate new database:
onCreate(_db);
}
}
}
这是我的MovieDetailFragment代码:
package com.example.moviemanager;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
public class MovieDetailFragment extends Fragment {
//private TextView detailText;
private long rowID;
private EditText keyEditText;
private EditText titleEditText;
private EditText typeEditText;
private EditText storyEditText;
private EditText ratingEditText;
private EditText languageEditText;
private EditText runtimeEditText;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.viewmoviedetail, container );
return v;
}
public void updateDetails(int value,String ttl) {
System.out.println(""+value+" "+ttl);
if(value > -1){
System.out.println(""+value);
keyEditText = (EditText)getActivity().findViewById(R.id.keyeditText);
titleEditText = (EditText)getActivity().findViewById(R.id.titleeditText);
typeEditText = (EditText)getActivity().findViewById(R.id.typeeditText);
storyEditText = (EditText)getActivity().findViewById(R.id.storyeditText);
ratingEditText = (EditText)getActivity().findViewById(R.id.ratingeditText);
languageEditText = (EditText)getActivity().findViewById(R.id.languageeditText);
runtimeEditText = (EditText)getActivity().findViewById(R.id.runtimeeditText);
DatabaseHandler dh = new DatabaseHandler(MovieDetailFragment.this.getActivity());
dh.open();
Cursor getid = dh.get_id(ttl);
getid.moveToFirst();
long id = getid.getLong(0);
Cursor result = dh.getRow(id);
result.moveToFirst();
keyEditText.setText(result.getString(0));
titleEditText.setText(result.getString(1));
typeEditText.setText(result.getString(2));
storyEditText.setText(result.getString(3));
ratingEditText.setText(result.getString(4));
languageEditText.setText(result.getString(5));
runtimeEditText.setText(result.getString(6)+" min");
result.close();
dh.close();
}
}
}
这是我的DetailMovie代码:
package com.example.moviemanager;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
public class DetailMovie extends FragmentActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.detail_movie);
Intent intent = getIntent();
int orientation = getResources().getConfiguration().orientation;
// destroy this activity and go back to the "base" view if we are in landscape mode
// this activity is only for portrait mode
if (orientation == Configuration.ORIENTATION_LANDSCAPE)
finish();
if (intent != null) {
FragmentManager manager = getSupportFragmentManager();
MovieDetailFragment detailFragment = (MovieDetailFragment) manager.findFragmentById(R.id.detailmovie_fragment);
if (detailFragment != null) {
int position = intent.getIntExtra("POSITION", -1);
String title = intent.getStringExtra("TITLE");
if (position > -1) {
detailFragment.updateDetails(position,title);
}
}
}
else {
//Log.d("FRAGMENT", "DetailsActivity not started by intent");
System.out.println("fail detailprint");
}
}
}
我确定错误是在sql部分,但我不知道如何解决它。有人可以帮我这个。谢谢。