嗨,我试图添加一些细节到Android数据库。我创建了表但我无法将详细信息转换为列表视图

时间:2015-08-20 11:33:34

标签: android sql android-sqlite

我的主要活动是

public class MainActivity extends Activity {

private EditText title_name,head_name,content;
private Button saveButton;
private DatabaseHandler dba;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dba=new DatabaseHandler(MainActivity.this);
    title_name=(EditText)findViewById(R.id.editText_Title);
    head_name=(EditText)findViewById(R.id.ediText_Name);
    content=(EditText)findViewById(R.id.editText_Content);
    saveButton=(Button)findViewById(R.id.button_Save);
    saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            saveTodb();
        }
    });
}

private void saveTodb() {

    Mywish wish=new Mywish();
    wish.setTitle(title_name.getText().toString().trim());
    wish.setHeadingName(head_name.getText().toString().trim());
    wish.setContent(content.getText().toString().trim());
    dba.addWishes(wish);
    dba.close();

    title_name.setText("");
    head_name.setText("");
    content.setText("");
   Intent i =new Intent(MainActivity.this,DisplayItem.class);
    startActivity(i);
}

}  和我的Consatnts.java,在这里我声明了我的数据库变量和细节`

public class Constants {

public static  final  String DATABASE_NAME="diary";
public static  final  int DATABASE_VERSION=1;
public static  final  String TABLE_NAME="details";
public static  final  String TITLE_NAME="title";
public static  final  String HEAD_NAME="headingname";
public static  final  String CONTENT_NAME ="content";
public static  final  String DATE_NAME="date";
public static  final  String KEY_ID="_id";

}

我的DatabaseHandler类是

public class DatabaseHandler extends SQLiteOpenHelper{

private final ArrayList wishList = new ArrayList<>();

public DatabaseHandler(Context context ) {
    super(context,Constants.DATABASE_NAME,null,Constants.DATABASE_VERSION );
}

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_DIARY_TABLE="CREATE TABLE "+Constants.TABLE_NAME + "("+Constants.KEY_ID +" INTEGER PRIMARY KEY,"+
            Constants.TITLE_NAME + " TEXT,"+Constants.HEAD_NAME +" TEXT,"+ Constants.CONTENT_NAME+" TEXT,"+Constants.DATE_NAME +" INTEGER)";
    db.execSQL(CREATE_DIARY_TABLE);


}

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


    db.execSQL("DROP TABLE IF EXISTS "+Constants.TABLE_NAME);
    onCreate(db);


}

public  void addWishes(Mywish wish)
{
    SQLiteDatabase db=this.getWritableDatabase();

    ContentValues values=new ContentValues();
    values.put(Constants.TITLE_NAME,wish.getTitle());
    values.put(Constants.HEAD_NAME,wish.getHeadingName());
    values.put(Constants.CONTENT_NAME,wish.getContent());
    values.put(Constants.DATE_NAME,java.lang.System.currentTimeMillis());
    db.insert(Constants.TABLE_NAME, null, values);
    Log.v("WISH SUCCESfuHOOO"," Hoo");
    db.close();
}

public ArrayList<Mywish> getWishes()
{
    String selectQuery="SELECT * FROM"+Constants.TABLE_NAME;
    SQLiteDatabase db=this.getReadableDatabase();
    Cursor cursor=db.query(Constants.TABLE_NAME,new String[]{Constants.KEY_ID,Constants.TITLE_NAME,Constants.HEAD_NAME,Constants.CONTENT_NAME,
   Constants.DATE_NAME },null,null,null,null,null,Constants.DATE_NAME+"DESC" );

          if (cursor.moveToFirst())
          {
              do {

                  Mywish wish=new Mywish();
                  wish.setTitle(cursor.getString(cursor.getColumnIndex(Constants.TITLE_NAME)));
                  wish.setHeadingName(cursor.getString(cursor.getColumnIndex(Constants.HEAD_NAME)));
                  wish.setContent(cursor.getString(cursor.getColumnIndex(Constants.CONTENT_NAME)));
                  java.text.DateFormat dateFormat=java.text.DateFormat.getDateInstance();
                     String datedata=dateFormat.format(new Date(cursor.getLong(cursor.getColumnIndex(Constants.DATE_NAME))).getTime());
                    wish.setDateRecorded(datedata);
                  wishList.add(wish);
              }while (cursor.moveToNext());
          }

    return wishList;
}

}

Mywish类用于声明我的应用程序中使用的数据变量

public class Mywish {
public String Title;
public String DateRecorded;
public  String Content;
public  String HeadingName;

public String getContent() {
    return Content;
}

public void setContent(String content) {
   this.Content = content;
}

public String getDateRecorded() {
    return DateRecorded;
}

public void setDateRecorded(String dateRecorded) {
   this.DateRecorded = dateRecorded;
}

public String getHeadingName() {
    return HeadingName;
}

public void setHeadingName(String headingName) {
    this.HeadingName = headingName;
}

public String getTitle() {
    return Title;
}

public void setTitle(String title) {
   this.Title = title;
}

}

Displayitem Class用于在List视图中显示详细信息。我设置了适配器,除了值之外的所有内容都没有进入List视图。

public class DisplayItem extends Activity {

  private DatabaseHandler dba;
private ArrayList<Mywish> dbwishes=new ArrayList<>();
private WishAdapter wishAdapter;
private ListView listview;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_display_item);
    Log.v("Dispaly act","DiSPLAYAVTIVIT");

    listview=(ListView)findViewById(R.id.List);
    referesData();

}

private void referesData() {

    dbwishes.clear();
    dba=new DatabaseHandler(getApplicationContext());
    ArrayList<Mywish> wishesfrmDb=dba.getWishes();

    for (int i=0;i<wishesfrmDb.size();i++)
    {
      String title=wishesfrmDb.get(i).getTitle() ;
        String headname=wishesfrmDb.get(i).getHeadingName();
        String content=wishesfrmDb.get(i).getContent();
        String date=wishesfrmDb.get(i).getDateRecorded();
        Mywish myWish=new Mywish();
         myWish.setTitle(title);
        myWish.setContent(content);
        myWish.setHeadingName(headname);
        myWish.setDateRecorded(date);
        dbwishes.add(myWish);

    }
    dba.close();

    wishAdapter =new WishAdapter(DisplayItem.this,R.layout.wish_row,dbwishes);
    listview.setAdapter(wishAdapter);
}

public  class  WishAdapter extends ArrayAdapter<Mywish>

{
    Activity activity;
    int layoutResource;
    Mywish wish;
    ArrayList<Mywish> mData=new ArrayList<>();

    public WishAdapter(Activity act, int resource, ArrayList<Mywish> data) {
        super(act, resource, data);
        activity=act;
        layoutResource=resource;
        mData=data;
        notifyDataSetChanged();

    }


    @Override
    public int getCount() {
        return mData.size();
    }

    @Override
    public Mywish getItem(int position) {
        return mData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return super.getItemId(position);
    }



    @Override
    public int getPosition(Mywish item) {
        return super.getPosition(item);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View row= convertView;
        ViewHolder holder=null;
        if (row==null ||(row.getTag()==null))
        {
            LayoutInflater inflater=LayoutInflater.from(activity);
            row=inflater.inflate(layoutResource,null);
            holder=new ViewHolder();
            holder.mTitle=(TextView)row.findViewById(R.id.textView_listTitle);
            holder.mHead=(TextView)row.findViewById(R.id.textView_listName);

            holder.mDate=(TextView)row.findViewById(R.id.textView_listDate);
            row.setTag(holder);

        } else {
            holder=(ViewHolder) row.getTag();
        }
        holder.myWish=getItem(position);
        holder.mTitle.setText(holder.myWish.getTitle());
        holder.mHead.setText(holder.myWish.getHeadingName());
        holder.mDate.setText(holder.myWish.getDateRecorded());


        return row;

    }



    class  ViewHolder{
        TextView mTitle;
        TextView mHead;
        TextView mDate;
        TextView mId;
        TextView mContent;
        Mywish myWish;
    }
}

}

我的日志是  进程:harico.databaseex,PID:6329     java.lang.RuntimeException:无法启动活动ComponentInfo {harico.databaseex / harico.databaseex.DisplayItem}:java.lang.IllegalArgumentException:无效的LIMIT子句:date DESC

1 个答案:

答案 0 :(得分:0)

和Waqar Ahmed一样:

  

“Constants.DATE_NAME +”DESC“,你没有在”​​DESC“之前放置空间

光标的参数没有很好的排序,应该是这样的:

static {
    System.setProperty("org.apache.commons.logging.Log",
                       "org.apache.commons.logging.impl.NoOpLog");
}