2014-05-20 3 views
0

두 가지 서비스 중 하나는 센서를 사용하고 다른 하나는 GPS를 사용합니다. 하나의 데이터베이스가 있습니다. 나는 그것들을 결합 할 때 평균 센서 값을 얻고 그것들에 GPS 라인을 쓴다. 평균을 얻으려면 DB를 계산하십시오. 그러나 잠시 후 응용 프로그램이 작동하지 않습니다. 그것은 그 오류를 제공합니다.창이 전체 요청 할당 오류입니다.

인용문 W/CursorWindow (2852) : 할당 228 바이트, 여유 공간이 156 바이트, 창 크기 2097152 바이트 인용문

캐시 또는 뭔가를 취소 할 수있는 가능성이 요청 : 윈도우가 가득 ?

+0

표시 하시겠습니까? –

답변

0
public class GPSDataContentProvider extends ContentProvider { 

private static final String TAG = "GPSDataContentProvider"; 

public static final String DATABASE_NAME = "semgpsdata.db"; 
private static final int DATABASE_VERSION = 1; 
public static final String POINT_TABLE_NAME = "gpspoints"; 

public static final String AUTHORITY = "com.semih"; 
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/gpspoint"); 



private static final UriMatcher uriMatcher ; 

static { 
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); 
    uriMatcher.addURI(AUTHORITY, "gpspoint", DATABASE_VERSION); 
} 

/** 
* This class helps open, create, and upgrade the database file. 
*/ 
public static class DatabaseHelper extends SQLiteOpenHelper { 

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

    @Override 
    public void onCreate(SQLiteDatabase db) { 
    try { 
    Log.i(TAG, "Creating table " + POINT_TABLE_NAME);  
    db.execSQL("CREATE TABLE " + POINT_TABLE_NAME + " (" 
      + GPSData.GPSPoint.KEY_ID + " INTEGER PRIMARY KEY," 
      + GPSData.GPSPoint.LATITUDE + " REAL," 
      + GPSData.GPSPoint.LONGITUDE + " REAL," 
      + GPSData.GPSPoint.PRESSURE + " DOUBLE," 
      + GPSData.GPSPoint.BHEIGHT + " REAL," 
      + GPSData.GPSPoint.TEMPERATURE + " REAL," 
      + GPSData.GPSPoint.HUMIDITY + " REAL," 
      + GPSData.GPSPoint.FLOOR + " REAL," 
      + GPSData.GPSPoint.ADDRESS + " REAL," 
      + GPSData.GPSPoint.PROVIDER + " REAL," 
      + GPSData.GPSPoint.SAT + " REAL," 
      + GPSData.GPSPoint.SPEED + " REAL," 
      + GPSData.GPSPoint.ACCURACY + " REAL," 
      + GPSData.GPSPoint.USER + " REAL," 
      + GPSData.GPSPoint.PHONE + " REAL," 
      + GPSData.GPSPoint.ESAY + " REAL," 
      + GPSData.GPSPoint.SAY + " REAL," 
      + GPSData.GPSPoint.KNTRL + " REAL," 
      + GPSData.GPSPoint.TIME + " INTEGER" 
      + ");"); 
    } catch (SQLiteException e) { 
     Log.e(TAG, e.toString()); 
    } 
    } 

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

    public int getDbCount() { 
     String countQuery = "SELECT * FROM " + POINT_TABLE_NAME; 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cursor = db.rawQuery(countQuery, null); 

     int count = cursor.getCount(); 
     cursor.close(); 

     // return count 
     return count; 
    } 

    public void deleteDb(long id) { 
     SQLiteDatabase db = this.getWritableDatabase(); 
     db.delete(POINT_TABLE_NAME, GPSData.GPSPoint.KEY_ID + " = ?", 
       new String[] { String.valueOf(id) }); 
    } 

    public double getPressure (int rowID) { 
     double uname = 0; 
     SQLiteDatabase db = this.getReadableDatabase(); 

     String where= GPSData.GPSPoint.KEY_ID + "=" + rowID; 
     String order = GPSData.GPSPoint.PRESSURE; 

     Cursor mCursor= db.query (POINT_TABLE_NAME, null, where, null, null, null,order); 

      while (mCursor.moveToNext()) { 
       uname = mCursor.getDouble(mCursor.getColumnIndex(GPSData.GPSPoint.PRESSURE)); 

      } 

      mCursor.close(); 

      return uname; 

    } 

    public double getBHeight (int rowID) { 
     double uname1 = 0; 
     SQLiteDatabase db = this.getReadableDatabase(); 

     String where= GPSData.GPSPoint.KEY_ID + "=" + rowID; 
     String order = GPSData.GPSPoint.BHEIGHT; 

     Cursor mCursor= db.query (POINT_TABLE_NAME, null, where, null, null, null,order); 

      while (mCursor.moveToNext()) { 
       uname1 = mCursor.getDouble(mCursor.getColumnIndex(GPSData.GPSPoint.BHEIGHT)); 

      } 
      mCursor.close(); 
      return uname1; 

    } 

    public double getTemp (int rowID) { 
     double uname2 = 0; 
     SQLiteDatabase db = this.getReadableDatabase(); 

     String where= GPSData.GPSPoint.KEY_ID + "=" + rowID; 
     String order = GPSData.GPSPoint.TEMPERATURE; 

     Cursor mCursor= db.query (POINT_TABLE_NAME, null, where, null, null, null,order); 

      while (mCursor.moveToNext()) { 
       uname2 = mCursor.getDouble(mCursor.getColumnIndex(GPSData.GPSPoint.TEMPERATURE)); 

      } 
      mCursor.close(); 
      return uname2; 

    } 

    public double getHumidity (int rowID) { 
     double uname3 = 0; 
     SQLiteDatabase db = this.getReadableDatabase(); 

     String where= GPSData.GPSPoint.KEY_ID + "=" + rowID; 
     String order = GPSData.GPSPoint.HUMIDITY; 

     Cursor mCursor= db.query (POINT_TABLE_NAME, null, where, null, null, null,order); 

      while (mCursor.moveToNext()) { 
       uname3 = mCursor.getDouble(mCursor.getColumnIndex(GPSData.GPSPoint.HUMIDITY)); 

      } 
      mCursor.close(); 
      return uname3; 

    } 


} 

private DatabaseHelper mOpenHelper; 


public boolean onCreate() { 
    mOpenHelper = new DatabaseHelper(getContext()); 
    return true; 
} 


@Override 
public int delete(Uri arg0, String arg1, String[] arg2) { 
// TODO Auto-generated method stub 
return 0; 
} 


@Override 
public String getType(Uri uri) { 
Log.i(TAG, "getting type for " + uri.toString()); 
// TODO Auto-generated method stub 
return null; 
} 


@Override 
public Uri insert(Uri uri, ContentValues values) { 
Log.e(TAG, "inserting value " + values.toString()); 

    SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
long rowId = db.insert(POINT_TABLE_NAME, "", values); 
    if (rowId > 0) { 
     Uri noteUri = ContentUris.withAppendedId(GPSDataContentProvider.CONTENT_URI, rowId); 
     getContext().getContentResolver().notifyChange(noteUri, null); 
     return noteUri; 
    } 

    throw new SQLException("Failed to insert row into " + uri); 
} 


    @Override 
public Cursor query(Uri uri, String[] projection, String selection, 
String[] selectionArgs, String sortOrder) { 

    return null; 
    } 


    @Override 
    public int update(Uri uri, ContentValues values, String selection, 
    String[] selectionArgs) { 

    return 0; 
} 
} 
관련 문제