android,这两处报错不知怎么改

YXTS122 2017-10-24 12:31:16


public class MainActivity extends Activity {
LayoutInflater inflater;
Context mcontext;
EditText input_contact;//输入联系人的信息来查找联系人
ListView show_contact;//显示所有的联系人
Button new_contact;//新建联系人

List<Map<String,String>> contacts_infos=new ArrayList<Map<String,String>>();
listViewAdapter lvadapter;


//初始化各类控件
public void initfindViewById(){
input_contact=(EditText) findViewById(R.id.input_contact);
show_contact=(ListView) findViewById(R.id.show_contacts);
new_contact=(Button) findViewById(R.id.new_contact);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initfindViewById();
try {
init();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
new_contact.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(MainActivity.this,AddActivity.class);
startActivity(intent);
}
});

}

public class deletContactListener implements OnLongClickListener{

@Override
public boolean onLongClick(View v) {

final int i=(int)v.getTag();
TextView tv_name=(TextView) v.findViewById(R.id.contact_name);
final String name=tv_name.getText().toString();
new AlertDialog.Builder(MainActivity.this)//此处括号中不能使用mcontext,应为他直接
//通过getApplicationContext()获得的Context,而必须使用Activity,因为只有一个Activity才能添加一个窗体。
.setMessage("确定删除联系人吗?")
.setTitle("提示")
.setPositiveButton("确定", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//设置你的操作事项
ContentResolver resolver =getContentResolver();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Cursor cursor = resolver.query(uri, new String[]{Data._ID},"display_name=?", new String[]{name}, null);
if(cursor.moveToFirst()){
int id = cursor.getInt(0);
//根据id删除data中的相应数据
resolver.delete(uri, "display_name=?", new String[]{name});
uri = Uri.parse("content://com.android.contacts/data");
resolver.delete(uri, "raw_contact_id=?", new String[]{id+""});
}
//对于List<Map<String,String>>,删除list集合中的一个元素,只需要remove(i),i就是列号。
contacts_infos.remove(i);//删除当前视图上的i列元素,但没有删除数据库中元素。
lvadapter.notifyDataSetChanged();
}
})

.setNegativeButton("取消",
new android.content.DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})

.show();




return true;
}
}



public void init() throws Exception{
mcontext=getApplicationContext();
inflater=LayoutInflater.from(mcontext);
TestContact();
Log.i("info:",contacts_infos.toString());
lvadapter=new listViewAdapter();
show_contact.setAdapter(lvadapter);
}


//为lisview设置适配器
public class listViewAdapter extends BaseAdapter{

@Override
public int getCount() {
// TODO Auto-generated method stub
return contacts_infos.size();
}

@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}

@Override
public View getView(int position, View convertview, ViewGroup parent) {
convertview=inflater.inflate(R.layout.listview1, null);
TextView contact_name1=(TextView) convertview.findViewById(R.id.contact_name);
TextView contact_tel1=(TextView) convertview.findViewById(R.id.contact_tel);
contact_name1.setText("姓名:"+contacts_infos.get(position).get("name"));

int a=contacts_infos.get(position).get("tel").indexOf("[");
int b=contacts_infos.get(position).get("tel").indexOf("]");
String s=contacts_infos.get(position).get("tel").substring(1, b);
contact_tel1.setText(s);
convertview.setTag(position);
convertview.setOnClickListener(new itemOnClickListener());
convertview.setOnLongClickListener(new deletContactListener());
return convertview;
}

}

public class itemOnClickListener implements OnClickListener{

@Override
public void onClick(View view) {
// TODO Auto-generated method stub
TextView con_tel=(TextView) view.findViewById(R.id.contact_tel);
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+con_tel.getText().toString()));
startActivity(intent);
}
}



//查询所有联系人的姓名,电话,邮箱
public void TestContact() throws Exception {

ContentResolver cr=getContentResolver();
Cursor cursor=cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(cursor.moveToNext()){
Map<String,String> map=new HashMap<String,String>();
//获取联系人的相关的信息
String id=cursor.getString( cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
//根据联系热的id获取联系人的电话号码
Cursor phone=getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+id,
null,
null);
ArrayList<String> detail=new ArrayList<String>();
//得到对应联系人的电话号码
while(phone.moveToNext()){
String phoneNum=phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
detail.add(phoneNum);

}
phone.close();

//将联系人的信息添加到map集合中
map.put("name", name);
map.put("tel", detail.toString());
contacts_infos.add(map);
}
cursor.close();
}



@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}


public class AddActivity extends Activity{
EditText add_contact_name;
EditText add_contact_tel;
Button sure;//addContact界面确定按钮

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.addcontact);
add_contact_name=(EditText) findViewById(R.id.add_contact_name);
add_contact_tel=(EditText) findViewById(R.id.add_contact_tel);
sure=(Button) findViewById(R.id.sure);
sure.setOnClickListener(new addContactOnClickListener());
}


public class addContactOnClickListener implements OnClickListener{

@Override
public void onClick(View v) {

ContentValues values=new ContentValues();
String add_name=add_contact_name.getText().toString();
String add_tel=add_contact_tel.getText().toString();
Uri rawContactUri=getBaseContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId=ContentUris.parseId(rawContactUri);
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
// 内容类型
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
// 联系人名字
values.put(StructuredName.GIVEN_NAME, add_name);
// 向联系人URI添加联系人名字
getContentResolver().insert(Data.CONTENT_URI, values);
values.clear();

values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
// 联系人的电话号码
values.put(Phone.NUMBER, add_tel);
// 电话类型
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
// 向联系人电话号码URI添加电话号码
getContentResolver().insert(Data.CONTENT_URI, values);
values.clear();
Intent intent=new Intent(AddActivity.this,MainActivity.class);
startActivity(intent);

}
}

}
...全文
554 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonFY 2017-10-26
  • 打赏
  • 举报
回复
你把数据存在哪儿的,把那个地方的也删掉
YXTS122 2017-10-25
  • 打赏
  • 举报
回复
代码改好了,可删掉联系人后,然后关闭这个app,再打开这个app,联系人信息怎么仍然存在?
YXTS122 2017-10-25
  • 打赏
  • 举报
回复
activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.callphones.MainActivity" >
<EditText
android:inputType="text"
android:id="@+id/input_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
android:textSize="25sp"
/>
<ListView
android:id="@+id/show_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:headerDividersEnabled="false"
android:layout_below="@+id/input_contact"
/>
<Button
android:id="@+id/new_contact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="30sp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:text="添加联系人"
android:layout_marginBottom="10dp"
android:padding="10dp"
/>



</RelativeLayout>

addcontact.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="姓名"
android:textSize="20sp"
/>
<EditText
android:id="@+id/add_contact_name"
android:layout_width="match_parent"
android:layout_height="30dp"
android:padding="5dp"
android:textSize="20sp"
android:hint="请输入联系人的姓名"
/>
<TextView
android:id="@+id/tv_tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp"
android:text="号码"
android:textSize="20sp"
/>
<EditText
android:id="@+id/add_contact_tel"
android:layout_width="match_parent"
android:layout_height="30dp"
android:padding="5dp"
android:textSize="20sp"
android:hint="请输入联系人的电话号码"
/>
<Button
android:id="@+id/sure"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:textSize="20sp"
android:layout_gravity="center_horizontal"
android:text="确定"
/>

</LinearLayout>

listview1.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/contact_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:text="名字"
android:textSize="20sp"
/>
<TextView
android:id="@+id/contact_tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:text="电话"
android:textSize="20sp"
/>

</LinearLayout>

<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.CALL_PHONE"/>

qq824827715 2017-10-25
  • 打赏
  • 举报
回复
第一个问题 方法参数的问题 参数顺序 类型 数量对不上 不懂可以贴掉方法的工具框可鼠标在红线上的提示内容 第二个问题 Integer.pastInt(String(xxxxxx))
jklwan 2017-10-24
  • 打赏
  • 举报
回复
int的问题,你需要用java7才能强转为int,否则只能用Integer

int i = (Integer)view.getTag();
Data的问题,你导入的包是否正确,是否是ContactsContract.Data。对照链接参考

80,350

社区成员

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

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