2011-10-17 25 views
0

我需要使用getIntent,但不能这样做,因为从我所做的事情来看,它不是SQLiteOpenHelper的构造函数,而getIntent需要从在onCreate内。onCreate不是SQLiteOpenHelper的构造函数,但我需要它getIntet

这就是这种情况,我将如何从SQLiteOpenHelper中访问它?

基本上,我试图从SQLiteOpenHelper中得到下面的代码,但是有麻烦。

 public void onCreate(Bundle savedInstanceState) { 
     onCreate(savedInstanceState); 
     sortTypePassed=getIntent().getStringExtra(SmithRockScreenActivity.SORT_TYPE_VAR); 
    } 

我想根据字符串的值做一个查询排序的数据库。像这样:

public Cursor getCursor() { 



    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 

    queryBuilder.setTables(TABLE_NAME); 

    String[] asColumnsToReturn = new String[] { COLUMN_ID, COLUMN_TITLE, COLUMN_YDSRATING, COLUMN_ROUTETYPE, COLUMN_AREA, COLUMN_ROUTEVIDEO, COLUMN_ROUTEDESCRIPTION}; 

    if (sortTypePassed.equals("nameSort")) { 

     Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, 
       null, null, null, "route_name ASC"); 

     return mCursor; 

    } else { 

     Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, 
       null, null, null, "yds_rating ASC"); 

     return mCursor; 

    } 

这里是它的整个长度代码:

package com.pocketbeta; 


import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.util.Locale; 

import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteException; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteQueryBuilder; 
import android.os.Bundle; 
import android.util.Log; 


class SmithRockDatabase extends SQLiteOpenHelper { 

public String sortTypePassed = "null"; 

private static final String DATABASE_PATH = "/data/data/com.pocketbeta/databases/"; 
private static final String DATABASE_NAME="smithrockdb.db"; 
private static final int SCHEMA_VERSION=1; 
public static final String TABLE_NAME = "SmithRockRoutes"; 
public static final String COLUMN_ID = "_id"; 
public static final String COLUMN_TITLE = "route_name"; 
public static final String COLUMN_YDSRATING = "yds_rating"; 
public static final String COLUMN_QUALITY = "quality"; 
public static final String COLUMN_IMAGE = "route_photo"; 
public static final String COLUMN_ROUTEVIDEO = "route_video"; 
public static final String COLUMN_TICKLIST = "ticklist"; 
public static final String COLUMN_AREA = "area"; 
public static final String COLUMN_ROUTETYPE = "route_type"; 
public static final String COLUMN_ROUTEDESCRIPTION = "route_description"; 

public SQLiteDatabase dbSqlite; 

private final Context myContext; 

public SmithRockDatabase(Context context) { 
    super(context, DATABASE_NAME, null, SCHEMA_VERSION); 
    this.myContext = context; 
    // check if exists and copy database from resource 
    //createDB(); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 
    // check if exists and copy database from resource 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 
public void createDatabase() { 
    createDB(); 
} 

private void createDB() { 

    boolean dbExist = DBExists(); 

    if (!dbExist) { 

     //By calling this method we create an empty database into the default system location 
     //We need this so we can overwrite that database with our database. 
     this.getReadableDatabase(); 
     //now we copy the database we included! 
     copyDBFromResource(); 


    } 



}  

private boolean DBExists() { 

    SQLiteDatabase db = null; 

    try { 
     String databasePath = DATABASE_PATH + DATABASE_NAME; 
     db = SQLiteDatabase.openDatabase(databasePath, null, 
       SQLiteDatabase.OPEN_READWRITE); 
     db.setLocale(Locale.getDefault()); 
     db.setLockingEnabled(true); 
     db.setVersion(1); 



    } catch (SQLiteException e) { 

     Log.e("SqlHelper", "database not found"); 

    } 

    if (db != null) { 


     db.close(); 

    } 


    return db != null ? true : false; 
} 

private void copyDBFromResource() { 

    InputStream inputStream = null; 
    OutputStream outStream = null; 
    String dbFilePath = DATABASE_PATH + DATABASE_NAME; 

    try { 

     inputStream = myContext.getAssets().open(DATABASE_NAME); 

     outStream = new FileOutputStream(dbFilePath); 

     byte[] buffer = new byte[1024]; 
     int length; 
     while ((length = inputStream.read(buffer)) > 0) { 
      outStream.write(buffer, 0, length); 
     } 

     outStream.flush(); 
     outStream.close(); 
     inputStream.close(); 

    } catch (IOException e) { 

     throw new Error("Problem copying database from resource file."); 

    } 

} 

public void openDataBase() throws SQLException { 

    String myPath = DATABASE_PATH + DATABASE_NAME; 
    dbSqlite = SQLiteDatabase.openDatabase(myPath, null, 
      SQLiteDatabase.OPEN_READWRITE); 

} 

@Override 
public synchronized void close() { 

    if (dbSqlite != null) 
    { 
     dbSqlite.close(); 
    } 
    super.close(); 

} 

// NEED TO GET THIS CODE TO WORK TO BRING IN VALUE FROM OTHER INTENT!!!!!!!!!!!!!!!!!! 

// public void onCreate(Bundle savedInstanceState) { 
// onCreate(savedInstanceState); 
// sortTypePassed=getIntent().getStringExtra(SmithRockScreenActivity.SORT_TYPE_VAR); 
//} 
// } 


public Cursor getCursor() { 



    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder(); 

    queryBuilder.setTables(TABLE_NAME); 

    String[] asColumnsToReturn = new String[] { COLUMN_ID, COLUMN_TITLE, COLUMN_YDSRATING, COLUMN_ROUTETYPE, COLUMN_AREA, COLUMN_ROUTEVIDEO, COLUMN_ROUTEDESCRIPTION}; 

    if (sortTypePassed.equals("nameSort")) { 

     Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, 
       null, null, null, "route_name ASC"); 

     return mCursor; 

    } else { 

     Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, 
       null, null, null, "yds_rating ASC"); 

     return mCursor; 

    } 

} 


public String getName(Cursor c) { 


    return(c.getString(1)); 

} 

public String getRating(Cursor c) { 
    return(c.getString(2)); 
} 
public String getArea(Cursor c) { 
    return(c.getString(4)); 
} 
public String getRouteVideo(Cursor c) { 
    return(c.getString(5)); 
} 
public String getRouteDescription(Cursor c) { 
    return(c.getString(6)); 
} 

public String getRouteType(Cursor c) { 

    String routeValue=""; 
    routeValue=(c.getString(3)); 
    String noSelection = ""; 

    if (routeValue != null) { 
     return c.getString(3); 

    } else { 
     return(noSelection); 

    } 


} 

}

+0

你为什么不告诉我们你想要完成什么?你想传递一个值来执行查询吗?如果你正试图从SQLiteOpenHelper获取(),那么有些东西是不对的,因为这个类应该完全脱离你的视图。你的主要活动应该调用你的SQLiteOpenHelper类,而不是相反。 – Jack

+0

我需要根据变量值对数据库的返回进行排序。因此,例如,如果用户单击主屏幕上的按钮以按数字排序或按名称排序。 – Adam

回答

0

既然如此,我将如何访问它从SQLiteOpenHelper内?

理想情况下,您无法从SQLiteOpenHelper访问getIntent()。你在SQLiteOpenHelper上实现了一个构造函数(提示:你已经有了一个),并且传递它所需要的任何数据。理想情况下,不是涉及传递活动,而是值从任何地方获得活动(例如,Intent演员)。

+0

是的,我需要基于外部变量对SQLiteOpenHelper中的数据进行排序。我必须编写3个不同的SQLitOpenHelpers来对3种不同的样式进行排序。如果我可以在SQLiteHelper进行排序期间进行变量检查并进行相应的排序,则可以避免编写并引用3个不同的帮助程序。 – Adam

+0

@Adam:然后将该值作为参数传递给构造函数或调用的任何方法,以使其执行涉及排序的查询。 – CommonsWare

+0

@Adam为什么不有一个单独的方法,如getItems(string sortOrder)?用你正在返回的任何对象替换项目(getUsers,getPages等)。您不限于在构造函数中传递值。 – Jack

相关问题