代码运行不了

q5661889 2014-10-05 11:49:33
package com.example.listview;
import static java.lang.System.out;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.Display;
import android.view.View;
import android.widget.AdapterView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Activity01 extends Activity {
LinearLayout m_LinearLayout;
ListView m_ListView;

public void onCreate(Bundle savedInstanceState) {
String number = "";
String contact="";
super.onCreate(savedInstanceState);

String string = "";
/* 创建LinearLayout布局对象 */
m_LinearLayout = new LinearLayout(this);
m_LinearLayout.setOrientation(LinearLayout.VERTICAL);
m_LinearLayout.setBackgroundColor(android.graphics.Color.BLACK);
/* 创建ListView对象 */
m_ListView = new ListView(this);
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
m_ListView.setBackgroundColor(Color.BLACK);
/* 添加m_ListView到m_LinearLayout布局 */
m_LinearLayout.addView(m_ListView, param);
/* 设置显示m_LinearLayout布局 */
setContentView(m_LinearLayout);
/* 获取数据库phone的cursor */

ContentResolver cur = getContentResolver();
Cursor cursor = cur.query(ContactsContract.Contacts.CONTENT_URI, null,
null, null, null);
startManagingCursor(cursor);
while (cursor.moveToNext()) {

//logCursor(cursor);

int i = 0;

i = cursor.getColumnIndex(PhoneLookup.DISPLAY_NAME);

contact = cursor.getString(i);

String contactId = cursor.getString(cursor
.getColumnIndex(ContactsContract.Contacts._ID)); // 获取联系人的ID号,在SQLite中的数据库ID

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



while (phone.moveToNext()) {

String strPhoneNumber = phone
.getString(phone
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); // 手机号码字段联系人可能不止一个
number += strPhoneNumber;

}


string += (contact + ":" + number + "\n");



}
ListAdapter adapter=new SimpleCursorAdapter(this,android.R.layout.simple_list_item_2,(Cursor) cur,new String[]{contact,number},new int[]{android.R.id.text1,android.R.id.text2});
m_ListView.setAdapter(adapter);
m_ListView.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0,View arg1,int arg2,long arg3)
{
DisplayerToast("滚动到第"+Long.toString(arg0.getSelectedItemId())+"项");
}
public void onNothingSelected(AdapterView<?> arg0)
{
//没有选中
}
});
m_ListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {


public void onItemClick(AdapterView<?> arg0,View arg1,int arg2,Long arg3)
{
DisplayerToast("选中了第"+Integer.toString(arg2+1)+"项");
}


});
}
public void DisplayerToast(String str)
{
Toast.makeText(this, str,Toast.LENGTH_SHORT).show();
}
}





...全文
164 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 8 楼 kifile 的回复:
那你改成 cursor 之后的情况是怎么样的?有什么错误信息,还是不显示数据
10-06 03:30:38.525: D/AndroidRuntime(305): Shutting down VM 10-06 03:30:38.525: W/dalvikvm(305): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 10-06 03:30:38.535: E/AndroidRuntime(305): FATAL EXCEPTION: main 10-06 03:30:38.535: E/AndroidRuntime(305): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listview/com.example.listview.Activity01}: java.lang.IllegalArgumentException: column 'Xiaogang ' does not exist 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.os.Handler.dispatchMessage(Handler.java:99) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.os.Looper.loop(Looper.java:123) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread.main(ActivityThread.java:4627) 10-06 03:30:38.535: E/AndroidRuntime(305): at java.lang.reflect.Method.invokeNative(Native Method) 10-06 03:30:38.535: E/AndroidRuntime(305): at java.lang.reflect.Method.invoke(Method.java:521) 10-06 03:30:38.535: E/AndroidRuntime(305): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-06 03:30:38.535: E/AndroidRuntime(305): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-06 03:30:38.535: E/AndroidRuntime(305): at dalvik.system.NativeStart.main(Native Method) 10-06 03:30:38.535: E/AndroidRuntime(305): Caused by: java.lang.IllegalArgumentException: column 'Xiaogang ' does not exist 10-06 03:30:38.535: E/AndroidRuntime(305): at android.database.AbstractCursor.getColumnIndexOrThrow(AbstractCursor.java:314) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.database.CursorWrapper.getColumnIndexOrThrow(CursorWrapper.java:99) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.support.v4.widget.SimpleCursorAdapter.findColumns(SimpleCursorAdapter.java:317) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.support.v4.widget.SimpleCursorAdapter.<init>(SimpleCursorAdapter.java:66) 10-06 03:30:38.535: E/AndroidRuntime(305): at com.example.listview.Activity01.onCreate(Activity01.java:97) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 10-06 03:30:38.535: E/AndroidRuntime(305): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 10-06 03:30:38.535: E/AndroidRuntime(305): ... 11 more
Kifile 2014-10-06
  • 打赏
  • 举报
回复
那你改成 cursor 之后的情况是怎么样的?有什么错误信息,还是不显示数据
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 6 楼 kifile 的回复:
[quote=引用 4 楼 q5661889 的回复:] [quote=引用 3 楼 wukunqiao 的回复:] 第85行,参数cur的类型是ContentResolver,你为嘛要把它强转成Cursor
不强转就报错[/quote] 你的 Cursor 对象明明是 cursor, 而不是 cur, 你传错对象了[/quote] 我改成cursor也没用
Kifile 2014-10-06
  • 打赏
  • 举报
回复
引用 4 楼 q5661889 的回复:
[quote=引用 3 楼 wukunqiao 的回复:] 第85行,参数cur的类型是ContentResolver,你为嘛要把它强转成Cursor
不强转就报错[/quote] 你的 Cursor 对象明明是 cursor, 而不是 cur, 你传错对象了
ascleft 2014-10-06
  • 打赏
  • 举报
回复
源码打包过来,我给你调ascleft@163.com
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 15 楼 kifile 的回复:
代码发我邮箱吧,我改好之后发你, kifile@kifile.com
已发
Kifile 2014-10-06
  • 打赏
  • 举报
回复
代码发我邮箱吧,我改好之后发你, kifile@kifile.com
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 13 楼 kifile 的回复:
刚才没有留意你的 id 是通过ContactsContract.CommonDataKinds.Phone.NUMBER,找到得,但是你这个却又是通过另外一个 Cursor 获取到得,因此建议你不要使用 SimpleAdapterCusor, 而是自己将号码,姓名进行一次封装,封装好了之后在自定义一个 Adapter 进行使用
我不会改,你能不能帮我改一下
Kifile 2014-10-06
  • 打赏
  • 举报
回复
刚才没有留意你的 id 是通过ContactsContract.CommonDataKinds.Phone.NUMBER,找到得,但是你这个却又是通过另外一个 Cursor 获取到得,因此建议你不要使用 SimpleAdapterCusor, 而是自己将号码,姓名进行一次封装,封装好了之后在自定义一个 Adapter 进行使用
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 11 楼 kifile 的回复:
发现原因了,你对 CursorAdapter 的使用方法错误,你是从两个不同的 Cursor 中读取字段,然后再建立 CursorAdpater, 而且建立 Adapter 的时候传入的值为字段值而非字段名 CursorAdapter 需要传入的是一个 Cursor, 及 Cursor 中的字段名,在你这儿对应的字段名就应该是PhoneLookup.DISPLAY_NAME和ContactsContract.Contacts._ID,而你却传入了从两个 Cursor 中获取到得 Cursor 属性值 Xiaogang,但是在你传入的 Cursor 中实际上是无法找到Xiaogang 这个字段名的
如果改为ContactsContract.Contacts._ID,那么显示的不是电话号码而是id号,只有通过id号才能找到电话号码
Kifile 2014-10-06
  • 打赏
  • 举报
回复
发现原因了,你对 CursorAdapter 的使用方法错误,你是从两个不同的 Cursor 中读取字段,然后再建立 CursorAdpater, 而且建立 Adapter 的时候传入的值为字段值而非字段名 CursorAdapter 需要传入的是一个 Cursor, 及 Cursor 中的字段名,在你这儿对应的字段名就应该是PhoneLookup.DISPLAY_NAME和ContactsContract.Contacts._ID,而你却传入了从两个 Cursor 中获取到得 Cursor 属性值 Xiaogang,但是在你传入的 Cursor 中实际上是无法找到Xiaogang 这个字段名的
q5661889 2014-10-06
  • 打赏
  • 举报
回复
引用 5 楼 u010940727 的回复:
源码打包过来,我给你调ascleft@163.com
已发
wukunqiao 2014-10-05
  • 打赏
  • 举报
回复
onItemClick方法最后一个参数应该是long,而不是Long..
q5661889 2014-10-05
  • 打赏
  • 举报
回复
引用 3 楼 wukunqiao 的回复:
第85行,参数cur的类型是ContentResolver,你为嘛要把它强转成Cursor

不强转就报错
wukunqiao 2014-10-05
  • 打赏
  • 举报
回复
第85行,参数cur的类型是ContentResolver,你为嘛要把它强转成Cursor
q5661889 2014-10-05
  • 打赏
  • 举报
回复
引用 1 楼 wukunqiao 的回复:
onItemClick方法最后一个参数应该是long,而不是Long..
引用 1 楼 wukunqiao 的回复:
onItemClick方法最后一个参数应该是long,而不是Long..
改过来后还是运行不了,报错信息如下: 10-05 11:35:15.886: D/AndroidRuntime(279): Shutting down VM 10-05 11:35:15.886: W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 10-05 11:35:15.896: E/AndroidRuntime(279): FATAL EXCEPTION: main 10-05 11:35:15.896: E/AndroidRuntime(279): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.listview/com.example.listview.Activity01}: java.lang.ClassCastException: android.app.ContextImpl$ApplicationContentResolver 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.os.Handler.dispatchMessage(Handler.java:99) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.os.Looper.loop(Looper.java:123) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread.main(ActivityThread.java:4627) 10-05 11:35:15.896: E/AndroidRuntime(279): at java.lang.reflect.Method.invokeNative(Native Method) 10-05 11:35:15.896: E/AndroidRuntime(279): at java.lang.reflect.Method.invoke(Method.java:521) 10-05 11:35:15.896: E/AndroidRuntime(279): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 10-05 11:35:15.896: E/AndroidRuntime(279): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 10-05 11:35:15.896: E/AndroidRuntime(279): at dalvik.system.NativeStart.main(Native Method) 10-05 11:35:15.896: E/AndroidRuntime(279): Caused by: java.lang.ClassCastException: android.app.ContextImpl$ApplicationContentResolver 10-05 11:35:15.896: E/AndroidRuntime(279): at com.example.listview.Activity01.onCreate(Activity01.java:85) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 10-05 11:35:15.896: E/AndroidRuntime(279): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 10-05 11:35:15.896: E/AndroidRuntime(279): ... 11 more

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧