短信提取查询不显示名称和日期

时间:2013-12-09 11:44:22

标签: java android sms

我正在尝试在表格布局中显示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;
    }

}

1 个答案:

答案 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();

然后迭代列名,以了解名称和日期是否存在。

干杯!!