存储联系人的Android应用程序

时间:2014-10-23 11:37:44

标签: java android

我开始学习Android编程,并且有这样的任务:

创建Android应用,您将在其中实现这些功能:

进行数据存储,以保留某些联系人的信息。 (SD卡或数据库上的文件)。 SD卡/数据库上的该文件应包含某些人的电话号码形式的数据。 显示您在列表视图组件中创建的文件的所有元素。 单击列表中的某个元素(联系人)应该发送短信从存储中选择他的号码。

我完成了一些代码,主要是通过本书完成这项任务,但是当我应该使用某些设置方法设置联系人的ID,姓名和电话号码时,我会遇到问题。

我在Contact.java中使用constructors,set和get方法定义了Contact类:

package com.example.zadatak1;

public class Contact {

    int id;
    String name;
    String phone;

    public Contact(){

    }

    public Contact(int id, String name, String phone){
        this.id=id;
        this.name=name;
        this.phone=phone;
    }

    public Contact(String name, String phone){
        this.name=name;
        this.phone=phone;
    }

    public int getID(){
        return this.id;
    }

    public void setID(int id){
        this.id=id;
    }

    public String getName(){
        return this.name;
    }

    public void setName(String name){
        this.name=name;
    }

    public String getPhone(){
        return this.phone;
    }

    public void setPhone(String phone){
        this.phone=phone;
    }

}

问题出在文件末尾的Handler.java行中:

package com.example.zadatak1;

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;

public class Handler extends SQLiteOpenHelper {

    private static final String DB_NAME = "databaseContact";
    private static final String TABLE_NAME = "contacts";
    private static final String ID = "id";
    private static final String NAME = "name";
    private static final String PHONE = "phone_number";

    private static final int DATABASE_VERSION = 1;

    public Handler(Context context){
        super(context, DB_NAME, null, DATABASE_VERSION);
    }



@Override
public void onCreate(SQLiteDatabase db) {

    String CREATE_CONTACTS = "CREATE_TABLE " + TABLE_NAME + ID + "INTEGER PRIMARY KEY," + NAME + "TEXT," + PHONE + "TEXT" + ")";
    db.execSQL(CREATE_CONTACTS);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}

void addContact(Contact contact){
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(NAME, contact.getName());
    values.put(PHONE, contact.getPhone());

    db.insert(TABLE_NAME, null, values);
    db.close();

}

    Contact getContact(int id){
    SQLiteDatabase db = this.getReadableDatabase();

    Cursor cursor = db.query(TABLE_NAME, new String[]{ID,NAME,PHONE}, NAME, new String[]{String.valueOf(id)}, null, null, null, null);
    if(cursor!=null)
        cursor.moveToFirst();

    Contact contact = new Contact(Integer.parseInt(cursor.getString(0)), cursor.getString(1), cursor.getString(2));

    return contact;

    }

    public List<Contact> getAllContacts(){
        List<Contact> contactList = new ArrayList<Contact>();

        String selectQuery = "SELECT * FROM " + TABLE_NAME+ " ORDER BY " + NAME + "ASC";
        SQLiteDatabase db = this.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        return contactList;
    }

        Contact contact = new Contact ();
        contact.setID(Integer.parseInt(cursor.getString(0)));
        contact.setName(cursor.getString(1));
        contact.setPhone(cursor.getString(2));

}

对于&#34; SetID&#34;,&#34; setName&#34;和#34; setPhone&#34;我有错误: &#34;此行的多个标记      - 令牌上的语法错误,期望的注释名称      代替      - 令牌上的语法错误&#34; setID&#34;,预期后的标识符      这个标记      - 令牌上的语法错误&#34;(&#34;,删除此令牌      - 令牌上的语法错误,删除这些令牌&#34;

&#34;此行有多个标记      - 令牌上的语法错误,而是期望AnnotationName      - 令牌上的语法错误&#34; setName&#34;,此令牌后预期的标识符      - 语法错误,插入&#34;类型VariableDeclaratorId&#34;去完成      FormalParameterList&#34;

&#34;此行有多个标记      - 令牌上的语法错误&#34; setPhone&#34;,此令牌后预期的标识符      - 语法错误,插入&#34;类型VariableDeclaratorId&#34;去完成      FormalParameterList      - 令牌上的语法错误,而是预期的注释名称&#34;

有任何帮助吗? :(

2 个答案:

答案 0 :(得分:0)

这部分代码必须是某种方法,而不仅仅是在类体中。将这部分代码转移到其他需要的地方(我不知道逻辑,所以我不能说它应该在哪里):

Contact contact = new Contact ();
 contact.setID(Integer.parseInt(cursor.getString(0)));
 contact.setName(cursor.getString(1));
 contact.setPhone(cursor.getString(2));

答案 1 :(得分:0)

试试这个..

1)你没有使用getter和setter正确的地方

2)你没有填充数组列表

public List<Contact> getAllContacts() {
        List<Contact> contactList = new ArrayList<Contact>();

        try {

            String selectQuery = "SELECT * FROM " + TABLE_NAME+ " ORDER BY " + NAME + "ASC";
            SQLiteDatabase db = this.getWritableDatabase();
            Cursor cursor = db.rawQuery(selectQuery, null);

            if (cursor != null && cursor.getCount() > 0) {
                if (cursor.moveToFirst()) {
                    do {
                        Contact contact = new Contact();
                        contact.setID(Integer.parseInt(cursor.getString(0)));
                        contact.setName(cursor.getString(1));
                        contact.setPhone(cursor.getString(2));

                        contactList.add(contact);

                    } while (cursor.moveToNext());

                }

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return contactList;
    }