CalendarView.java
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Locale;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;
public class CalendarView extends Activity {
DatabaseHandler db;
TextView t1, t2, t3, t4, t5, t6, t7, t8, t9, t10;
public GregorianCalendar month, itemmonth;// calendar instances.
public CalendarAdapter adapter;// adapter instance
public Handler handler;// for grabbing some event values for showing the dot
// marker.
public ArrayList<String> items; // container to store calendar items which
String selectedGridDate; // needs showing the event marker
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calendar);
t1 = (TextView) findViewById(R.id.textv1);
t2 = (TextView) findViewById(R.id.textv2);
t3 = (TextView) findViewById(R.id.textv3);
t4 = (TextView) findViewById(R.id.textv4);
t5 = (TextView) findViewById(R.id.textv5);
t6 = (TextView) findViewById(R.id.textv6);
t7 = (TextView) findViewById(R.id.textv7);
t8 = (TextView) findViewById(R.id.textv8);
t9 = (TextView) findViewById(R.id.textv9);
t10 = (TextView) findViewById(R.id.textv10);
db = new DatabaseHandler(this);
enter code here
Locale.setDefault(Locale.US);
month = (GregorianCalendar) GregorianCalendar.getInstance();
itemmonth = (GregorianCalendar) month.clone();
items = new ArrayList<String>();
adapter = new CalendarAdapter(this, month);
GridView gridview = (GridView) findViewById(R.id.gridview);
gridview.setAdapter(adapter);
handler = new Handler();
handler.post(calendarUpdater);
TextView title = (TextView) findViewById(R.id.title);
title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
RelativeLayout previous = (RelativeLayout) findViewById(R.id.previous);
previous.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setPreviousMonth();
refreshCalendar();
}
});
RelativeLayout next = (RelativeLayout) findViewById(R.id.next);
next.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
setNextMonth();
refreshCalendar();
}
});
gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
((CalendarAdapter) parent.getAdapter()).setSelected(v);
selectedGridDate = CalendarAdapter.dayString
.get(position);
String[] separatedTime = selectedGridDate.split("-");
String gridvalueString = separatedTime[2].replaceFirst("^0*",
"");// taking last part of date. ie; 2 from 2012-12-02.
int gridvalue = Integer.parseInt(gridvalueString);
// navigate to next or previous month on clicking offdays.
if ((gridvalue > 10) && (position < 8)) {
setPreviousMonth();
refreshCalendar();
} else if ((gridvalue < 7) && (position > 28)) {
setNextMonth();
refreshCalendar();
}
((CalendarAdapter) parent.getAdapter()).setSelected(v);
Log.e("selectedGridDate..", ""+selectedGridDate);
showToast(selectedGridDate);
Contact con=db.getContact(selectedGridDate);
Log.e("con", ""+con);
String log1 = con.getC1NAME();
Log.e("log1", log1);
t1.setText(log1);
String log2 = con.getC1NAME();
Log.e("log2", log2);
t2.setText(log2);
String log3 = con.getC1NAME();
t3.setText(log3);
String log4 = con.getC1NAME();
t4.setText(log4);
String log5 = con.getC1NAME();
t5.setText(log5);
String log6 = con.getC1NAME();
t6.setText(log6);
String log7 = con.getC1NAME();
t7.setText(log7);
String log8 = con.getC1NAME();
t8.setText(log8);
String log9 = con.getC1NAME();
t9.setText(log9);
String log10 = con.getC1NAME();
t10.setText(log10);
}
});
}
protected void setNextMonth() {
if (month.get(GregorianCalendar.MONTH) == month
.getActualMaximum(GregorianCalendar.MONTH)) {
month.set((month.get(GregorianCalendar.YEAR) + 1),
month.getActualMinimum(GregorianCalendar.MONTH), 1);
} else {
month.set(GregorianCalendar.MONTH,
month.get(GregorianCalendar.MONTH) + 1);
}
}
protected void setPreviousMonth() {
if (month.get(GregorianCalendar.MONTH) == month
.getActualMinimum(GregorianCalendar.MONTH)) {
month.set((month.get(GregorianCalendar.YEAR) - 1),
month.getActualMaximum(GregorianCalendar.MONTH), 1);
} else {
month.set(GregorianCalendar.MONTH,
month.get(GregorianCalendar.MONTH) - 1);
}
}
protected void showToast(String string) {
Toast.makeText(this, string, Toast.LENGTH_SHORT).show();
}
public void refreshCalendar() {
TextView title = (TextView) findViewById(R.id.title);
adapter.refreshDays();
adapter.notifyDataSetChanged();
handler.post(calendarUpdater); // generate some calendar items
title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));
}
public Runnable calendarUpdater = new Runnable() {
public void run() {
items.clear();
// Print dates of the current week
DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
for (int i = 0; i < 7; i++) {
String itemvalue;
itemvalue = df.format(itemmonth.getTime());
itemmonth.add(GregorianCalendar.DATE, 1);
items.add("2012-09-12");
items.add("2012-10-07");
items.add("2012-10-15");
items.add("2012-10-20");
items.add("2012-11-30");
items.add("2012-11-28");
}
adapter.setItems(items);
adapter.notifyDataSetChanged();
}
};
}
My Database is....
import java.util.ArrayList;
import java.util.List;
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 extends SQLiteOpenHelper {
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_NAME = "contactsManager.db";
public static final String TABLE_NAME = "contacts";
public static final String KEY_DT = "date";
public static final String KEY_C1 = "c1";
public static final String KEY_C2 = "c2";
public static final String KEY_C3 = "c3";
public static final String KEY_C4 = "c4";
public static final String KEY_C5 = "c5";
public static final String KEY_C6 = "c6";
public static final String KEY_C7 = "c7";
public static final String KEY_C8 = "c8";
public static final String KEY_C9 = "c9";
public static final String KEY_C10 = "c10";
public DatabaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String Create_Table = "CREATE TABLE " + TABLE_NAME + "(" + KEY_DT
+ " TEXT, " + KEY_C1 + " TEXT, " + KEY_C2 + " TEXT, " + KEY_C3
+ " TEXT, " + KEY_C4 + " TEXT, " + KEY_C5 + " TEXT, " + KEY_C6
+ " TEXT, " + KEY_C7 + " TEXT, " + KEY_C8 + " TEXT, " + KEY_C9
+ " TEXT, " + KEY_C10 + " TEXT " + ")";
db.execSQL(Create_Table);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME);
onCreate(db);
}
public void addContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues cv = new ContentValues();
cv.put(KEY_C1, contact.getC1NAME());
cv.put(KEY_C2, contact.getC2NAME());
cv.put(KEY_C3, contact.getC3NAME());
cv.put(KEY_C4, contact.getC4NAME());
cv.put(KEY_C5, contact.getC5NAME());
cv.put(KEY_C6, contact.getC6NAME());
cv.put(KEY_C7, contact.getC7NAME());
cv.put(KEY_C8, contact.getC8NAME());
cv.put(KEY_C9, contact.getC9NAME());
cv.put(KEY_C10, contact.getC10NAME());
db.insert(TABLE_NAME, null, cv);
db.close();
}
public Contact getContact(String _date) {
Log.e("_date", "" + _date);
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_DT, KEY_C1,
KEY_C2, KEY_C3, KEY_C4, KEY_C5, KEY_C6, KEY_C7, KEY_C8, KEY_C9,
KEY_C10 }, KEY_DT + "='" + _date + "'", null, null, null, null);
/*Cursor cursor = db.query(TABLE_NAME, new String[] { KEY_DT, KEY_C1,
KEY_C2, KEY_C3, KEY_C4, KEY_C5, KEY_C6, KEY_C7, KEY_C8, KEY_C9,
KEY_C10 }, KEY_DT + "=?", new String[] { _date }, null, null,
null, null);*/
Log.e("cursor", cursor.getCount() + "");
if (cursor != null)
Log.e("cursor", cursor + "");
Log.e("cursor1", cursor.moveToFirst() + "");
cursor.moveToFirst();
Log.e("cursor2", cursor.moveToFirst() + "");
Contact contact = new Contact(cursor.getString(0), cursor.getString(1),
cursor.getString(2), cursor.getString(3), cursor.getString(4),
cursor.getString(5), cursor.getString(6), cursor.getString(7),
cursor.getString(8), cursor.getString(9), cursor.getString(10));
db.close();
return contact;
}
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
String selectQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setDATE(cursor.getString(0));
contact.setC1NAME(cursor.getString(1));
contact.setC2NAME(cursor.getString(2));
contact.setC3NAME(cursor.getString(3));
contact.setC4NAME(cursor.getString(4));
contact.setC5NAME(cursor.getString(5));
contact.setC6NAME(cursor.getString(6));
contact.setC7NAME(cursor.getString(7));
contact.setC8NAME(cursor.getString(8));
contact.setC9NAME(cursor.getString(9));
contact.setC10NAME(cursor.getString(10));
contactList.add(contact);
} while (cursor.moveToNext());
}
db.close();
return contactList;
}
public int updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_C1, contact.getC1NAME());
values.put(KEY_C2, contact.getC2NAME());
values.put(KEY_C3, contact.getC3NAME());
values.put(KEY_C4, contact.getC4NAME());
values.put(KEY_C5, contact.getC5NAME());
values.put(KEY_C6, contact.getC6NAME());
values.put(KEY_C7, contact.getC7NAME());
values.put(KEY_C8, contact.getC8NAME());
values.put(KEY_C9, contact.getC9NAME());
values.put(KEY_C10, contact.getC10NAME());
return db.update(TABLE_NAME, values, KEY_DT + " = ?",
new String[] { contact.getDATE() });
}
public void deleteContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_NAME, KEY_DT + " = ?",
new String[] { contact.getDATE() });
db.close();
}
public int getContactsCount() {
String countQuery = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
cursor.close();
db.close();
return cursor.getCount();
}
}
我想在每次点击日期时获取所有行(日期,c1,c2,c3,.......,c10)的项目,但有光标空异常。即数据库没有任何记录。我已经插入了contactsManager .db 在资产文件夹中。当我在文件资源管理器数据/数据/...中检查 contactsManager.db 并在 sqlitedatabase 浏览器中打开此文件时,这显示空数据库。
My Logcat is
06-18 18:09:05.746: D/dalvikvm(29525): GC_EXTERNAL_ALLOC freed 51K, 53% free 2554K/5379K, external 1625K/2137K, paused 54ms
06-18 18:09:08.436: D/dalvikvm(29525): GC_EXTERNAL_ALLOC freed 8K, 53% free 2575K/5379K, external 4209K/5256K, paused 111ms
06-18 18:09:12.197: E/selectedGridDate..(29525): 2013-06-12
06-18 18:09:12.326: E/con(29525): android.database.sqlite.SQLiteCursor@40564040
06-18 18:09:12.326: E/con...(29525): false
06-18 18:09:12.326: E/first(29525): first
06-18 18:09:12.336: E/first1(29525): first1
06-18 18:09:12.350: E/hellllllll(29525): hello
06-18 18:09:12.350: D/AndroidRuntime(29525): Shutting down VM
06-18 18:09:12.356: W/dalvikvm(29525): threadid=1: thread exiting with uncaught exception (group=0x40015560)
06-18 18:09:12.386: E/AndroidRuntime(29525): FATAL EXCEPTION: main
06-18 18:09:12.386: E/AndroidRuntime(29525): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
06-18 18:09:12.386: E/AndroidRuntime(29525): at com.para.digital.technologies.panchang2013.CalendarView$4.onItemClick(CalendarView.java:122)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.os.Handler.handleCallback(Handler.java:587)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.os.Handler.dispatchMessage(Handler.java:92)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.os.Looper.loop(Looper.java:123)
06-18 18:09:12.386: E/AndroidRuntime(29525): at android.app.ActivityThread.main(ActivityThread.java:3683)
06-18 18:09:12.386: E/AndroidRuntime(29525): at java.lang.reflect.Method.invokeNative(Native Method)
06-18 18:09:12.386: E/AndroidRuntime(29525): at java.lang.reflect.Method.invoke(Method.java:507)
06-18 18:09:12.386: E/AndroidRuntime(29525): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
06-18 18:09:12.386: E/AndroidRuntime(29525): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
06-18 18:09:12.386: E/AndroidRuntime(29525): at dalvik.system.NativeStart.main(Native Method)
06-18 18:14:12.459: I/Process(29525): Sending signal. PID: 29525 SIG: 9
i want to get single row items,but it gives cursor is 0/empty .i do not understand, what should do i .
i am new for android developer ,please help me
THANKS in Advance....