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
无论我选择什么样的联系,我得到了同样的异常,所以我明明做错了什么..我只是不能很弄清楚我自己:(
任何帮助表示赞赏。
我当然没有,但我只是加了它,低,看到它的作品,现在我欣赏快速反应尼古拉。有人能给我一个快速解释为什么这是必要的吗?当我已经有一个应该只返回该值的查询时,为什么需要这样做对我来说并不合适? – trey85stang
将游标指针放到第一条记录是非常重要的,所以您可以使用.moveToNext()遍历记录,并检查该指针是否位于最后一条记录之后.isAfterLast()。查询不只返回该值(更好的说一个值),它返回的数据分别与查询条件中的数据一样多。您可以使用游标进行迭代并查看查询的结果。我希望我对你的问题的建议能够完成这项工作,这个快速解释让你更清楚。干杯。 –
尼古拉,我很欣赏你的答复对你的解释很有帮助。 – trey85stang