我正在尝试在表格布局中显示4个条目但它只显示地址和正文并显示它们但是当我输入另外2个(名称和日期)时程序崩溃。我想我的查询还可以。请帮忙
package com.androidhive.loginandregister;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
public class SMS extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sms);
List<String> aa=getSMS();
}
public List<String> getSMS(){
List<String> sms = new ArrayList<String>();
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null);
TableLayout table= (TableLayout)findViewById(R.id.table1);
while (cur.moveToNext()) {
String address = cur.getString(cur.getColumnIndex("address"));
String body = cur.getString(cur.getColumnIndexOrThrow("body"));
String date = cur.getString(cur.getColumnIndex("date"));
String name = cur.getString(cur.getColumnIndex("name"));
TextView address1= new TextView(this);
address1.setText(address);
TextView body1= new TextView(this);
body1.setText(body);
TextView date1= new TextView(this);
date1.setText(date);
TextView name1= new TextView(this);
name1.setText(name);
TableRow row= new TableRow(this);
row.addView(address1);
row.addView(body1);
row.addView(name1);
row.addView(date1);
table.addView(row);
sms.add("Number: " + address + " .Message: " + body + "Name :" + name + "Date: " + date);
}enter code here
return sms;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.sm, menu);
return true;
}
}
答案 0 :(得分:0)
我认为我们在sms表中没有'name'列,它将被存储为收件人ID。
要解决此问题,您需要知道库存消息应用程序数据库中存在的列名。
如果您正在使用模拟器,请尝试使用adb命令访问数据库。
~android-sdk\platform-tools>adb shell
$ cd /data/data/com.android.providers.telephony/databases
cd /data/data/com.android.providers.telephony/databases
$ sqlite3 mmssms.db
sqlite3 mmssms.db
SQLite version 3.6.22
Enter ".help" for instructions
sqlite> .headers on
sqlite> SELECT * FROM threads;
sqlite> SELECT * FROM sms;
现在您可以看到数据的存在方式,并使用正确的列名。
如果您正在尝试在设备中执行,请尝试添加
String [] colNames = cursor.getColumnNames();
然后迭代列名,以了解名称和日期是否存在。
干杯!!