我开始学习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;
有任何帮助吗? :(
答案 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;
}