2011-07-23 87 views
1

中的代码我一般新来的android和编程(即一个Linux系统管理员/脚本人员)。我一直试图让一个简单的android应用程序去感受编程,但我遇到了一些问题。无法从联系人列表中获取电话号码...

我能够串起一些想法和查询来获得所有联系人的列表视图,但现在id喜欢能够抓住所选联系人的电话号码,但我没有任何运气......我知道可能有更好的方法来做我正在做的事情,但我只是想了解这一点。

代码第一:

package com.SomeApp; 

import android.app.AlertDialog; 
import android.app.ListActivity; 
import android.database.Cursor; 
//import android.net.Uri; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.view.View; 
import android.widget.ListAdapter; 
import android.widget.ListView; 
import android.widget.SimpleCursorAdapter; 

public class CallAppActivity extends ListActivity 
{ /** Called when the activity is first created. */ 
    private ListAdapter mAdapter; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    //Get All information from ContactsContract 
    Cursor managedCursor = getContentResolver().query(
     ContactsContract.Contacts.CONTENT_URI, 
     null, 
     null, 
     null, 
     null 
    ); 

    //Activity will manage the cursor lifecycle. 
    startManagingCursor(managedCursor); 
    String[] columns = new String[] {ContactsContract.Contacts.DISPLAY_NAME}; 
    int[] names = new int[] {R.id.contact_entry}; 
    mAdapter = new SimpleCursorAdapter(
     this, 
     R.layout.main, 
     managedCursor, 
     columns, 
     names 
    ); 
    setListAdapter(mAdapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) 
    { super.onListItemClick(l, v, position, id); 

    Cursor lookup = (Cursor) mAdapter.getItem(position); 
    String contactId = lookup.getString(
     lookup.getColumnIndex(
     ContactsContract.Contacts._ID 
    ) 
    ); 

    Cursor phone_num = getContentResolver().query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
     null, 
     ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, 
     null, 
     null 
    ); 

    String phoneId = phone_num.getString(
     phone_num.getColumnIndex(
     ContactsContract.CommonDataKinds.Phone.NUMBER 
    ) 
    ); 

    //We are going to print shit to a message box.... 
    AlertDialog.Builder alertbox = new AlertDialog.Builder(this); 
    alertbox.setMessage(phoneId); 
    alertbox.show(); 
    } 
} 

而且现在的logcat ....

07-23 11:35:34.469: WARN/dalvikvm(781): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
07-23 11:35:34.479: ERROR/AndroidRuntime(781): FATAL EXCEPTION: main 
07-23 11:35:34.479: ERROR/AndroidRuntime(781): android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 

无论我选择什么样的联系,我得到了同样的异常,所以我明明做错了什么..我只是不能很弄清楚我自己:(

任何帮助表示赞赏。

回答

2

迪d您是否尝试将光标指针指向其数据的第一行,如cursor.moveToFirst(),然后再访问其中的数据?其实,对于Cursor phone_numCursor phone_id

+0

我当然没有,但我只是加了它,低,看到它的作品,现在我欣赏快速反应尼古拉。有人能给我一个快速解释为什么这是必要的吗?当我已经有一个应该只返回该值的查询时,为什么需要这样做对我来说并不合适? – trey85stang

+0

将游标指针放到第一条记录是非常重要的,所以您可以使用.moveToNext()遍历记录,并检查该指针是否位于最后一条记录之后.isAfterLast()。查询不只返回该值(更好的说一个值),它返回的数据分别与查询条件中的数据一样多。您可以使用游标进行迭代并查看查询的结果。我希望我对你的问题的建议能够完成这项工作,这个快速解释让你更清楚。干杯。 –

+1

尼古拉,我很欣赏你的答复对你的解释很有帮助。 – trey85stang

相关问题