【问题标题】:Arraylist hashmap androidArraylist hashmap android
【发布时间】:2015-07-08 02:05:47
【问题描述】:

我想将联系人及其号码的 HashMap 保存到 ArrayList 中,但我一直遇到此错误“缺少方法主体或声明抽象” 私有静态 ArrayList> getContacts();

我能够获取联系人及其号码并用 toast 显示,但我需要保存它,然后将其移动到 SQLite 数据库中。

import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;


public class Contacts extends ActionBarActivity {
private static final int PICK_CONTACT = 1;
//new code
private static ArrayList<HashMap<String, String>> getContacts();

private ArrayList<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();

private HashMap<String, String> contacts = new HashMap<String,String>();
//stop new code 
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_contacts);

}

public void btnAddContacts_Click(View view) {
    Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
    startActivityForResult(intent, PICK_CONTACT);
}

public void btnDone_Click(View view){
    Intent i = new Intent(Contacts.this, Message.class);
    startActivity(i);
}



@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);

    switch (reqCode) {
        case (PICK_CONTACT):
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c = managedQuery(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String id =
                            c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                    String hasPhone =
                            c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                    if (hasPhone.equalsIgnoreCase("1")) {
                        Cursor phones = getContentResolver().query(
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,
                                null, null);
                        phones.moveToFirst();
                        String phn_no = phones.getString(phones.getColumnIndex("data1"));
                        String name = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.DISPLAY_NAME));

//all new code added below
                        contacts.put(name, phn_no);


                        while (c.moveToNext()) {
                            String id1 =     c.getString(c.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));

                            String name1 = contacts.get(id1);
                            String phone =     c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));

                            HashMap<String, String> h = new HashMap<String, String>();
                            h.put("name", name1);
                            h.put("phone", phone);
                            data.add(h);
                        }

//the toast goes with the old code. it works fine. 
                        Toast.makeText(this, "contact info : " + phn_no + "\n" + name, Toast.LENGTH_LONG).show();

                    }
                }
            }
    }

}


}

【问题讨论】:

标签: java android sqlite arraylist hashmap


【解决方案1】:
private static ArrayList<HashMap<String, String>> getContacts;

删除() - 这些用于方法和调用构造函数来初始化对象。如果您也想初始化它,请使用

private static ArrayList<HashMap<String, String>> getContacts = new ArrayList<HashMap<String, String>>();

【讨论】:

  • 当我取下“()”时,“data.add(h);”仍然给出错误“无法解析方法'add(java.util.HashMap)',当我使用您建议的第二个时,它也会给出相同的错误
  • @isabella 那是因为data 是传递给onActivityResult(....) 方法的Intent 对象,请将其名称更改为唯一的名称。
  • 谢谢泰特斯!那行得通!我将其更改为 data1 并且该错误消失了。现在我试试看能不能把内容打印出来。
【解决方案2】:

更改此代码:

//new code
private static ArrayList<HashMap<String, String>> getContacts();

private ArrayList<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();

private HashMap<String, String> contacts = new HashMap<String,String>();

收件人:

private static ArrayList<HashMap<String, String>> getContacts = new ArrayList<HashMap<String, String>>();

private static ArrayList<HashMap<String, String>> data = new ArrayList<HashMap<String, String>>();

private static HashMap<String, String> contacts = new HashMap<String,String>();

你需要他们都是static。这是在您的 class 中访问它们的唯一方法。

编辑

尝试删除 getContacts 并使其成为 getter 像这样

public ArrayList<HashMap<String, String>> getContacts(){
     //put all the code here and return contacts
}

现在尝试编译。

【讨论】:

  • 感谢您的回答,但“data.add(h);”仍然给出错误“无法解析方法 'add(java.util.HashMap)'
  • 我不确定你的代码是怎么回事。您在哪里尝试使用 getContacts() 创建吸气剂?我不知道为什么抱怨 ArrayList 中的 add 方法,因为它是一个已经初始化的静态变量。
  • 我明白了。另一位用户建议我将“数据”更改为独特且有效的东西。现在我只是想确保联系人姓名和号码已保存在 ArrayList/HashMap
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多