【问题标题】:Android application for storage contacts用于存储联系人的 Android 应用程序
【发布时间】:2014-12-19 01:38:27
【问题描述】:

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

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

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

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

我在 Contact.java 中使用构造函数、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));

}

对于“SetID”、“setName”和“setPhone”,我遇到了错误: “这条线的多个标记 - 标记上的语法错误,应为 AnnotationName 反而 - 令牌“setID”的语法错误,标识符应在之后 这个令牌 - 标记“(”的语法错误,删除此标记 - 标记的语法错误,删除这些标记"

"此行有多个标记 - 标记上的语法错误,应改为 AnnotationName - 标记“setName”的语法错误,此标记后应有标识符 - 语法错误,插入“Type VariableDeclaratorId”完成 形式参数列表"

"此行有多个标记 - 令牌“setPhone”的语法错误,此令牌后应有标识符 - 语法错误,插入“Type VariableDeclaratorId”完成 形式参数列表 - 令牌上的语法错误,应改为 AnnotationName”

有什么帮助吗? :(

【问题讨论】:

    标签: java android


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      试试这个..

      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;
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-06
        • 1970-01-01
        相关资源
        最近更新 更多