gpt4 book ai didi

android - 无法向 ListView 添加值

转载 作者:行者123 更新时间:2023-11-29 00:30:44 26 4
gpt4 key购买 nike

我的 SMSReceiverActivity.java 中有以下代码:

package com.example.smsTest;

import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class SMSReceiverActivity extends ListActivity {
private SQLiteAdapter mySQLiteAdapter;

private List<String> bodyarr = new ArrayList<String>();
private ArrayAdapter<Message> arrayAdpt;

private BroadcastReceiver mIntentReceiver;
ListView listview;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_smsreceiver);

mySQLiteAdapter = new SQLiteAdapter(this);
mySQLiteAdapter.openToRead();

List<Message> bodyarr = mySQLiteAdapter.getAllMessages();

listview=this.getListView();

arrayAdpt = new ArrayAdapter<Message>(SMSReceiverActivity.this,
android.R.layout.simple_list_item_1, bodyarr);
listview.setAdapter(arrayAdpt);
}

@Override
protected void onResume() {
super.onResume();

IntentFilter intentFilter = new IntentFilter("SmsMessage.intent.MAIN");
mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("get_msg");

//Process the sms format and extract body &amp; phoneNumber
msg = msg.replace("\n", "");
String body = msg.substring(msg.lastIndexOf(":")+1, msg.length());
String pNumber = msg.substring(0,msg.lastIndexOf(":"));

bodyarr.add(body);
arrayAdpt.notifyDataSetChanged();

/*
* Create/Open a SQLite database
* and fill with dummy content
* and close it
*/
mySQLiteAdapter = new SQLiteAdapter(SMSReceiverActivity.this);
mySQLiteAdapter.openToWrite();
//mySQLiteAdapter.deleteAll();

mySQLiteAdapter.insert(body);

mySQLiteAdapter.close();
}
};

this.registerReceiver(mIntentReceiver, intentFilter);
}

@Override
protected void onPause() {
super.onPause();
this.unregisterReceiver(this.mIntentReceiver);
}

}

这是 SQLiteAdapter.java 的代码:

package com.example.smsTest;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;

public class SQLiteAdapter {

public static final String MYDATABASE_NAME = "MY_DATABASE";
public static final String MYDATABASE_TABLE = "MY_TABLE";
public static final int MYDATABASE_VERSION = 1;
public static final String KEY_ID = "_id";
public static final String KEY_CONTENT = "Content";

//create table MY_DATABASE (ID integer primary key, Content text not null);
private static final String SCRIPT_CREATE_DATABASE =
"create table " + MYDATABASE_TABLE + " ("
+ KEY_ID + " integer primary key autoincrement, "
+ KEY_CONTENT + " text not null);";

private SQLiteHelper sqLiteHelper;
private SQLiteDatabase sqLiteDatabase;

private Context context;

public SQLiteAdapter(Context c){
context = c;
}

public SQLiteAdapter openToRead() throws android.database.SQLException {
sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
sqLiteDatabase = sqLiteHelper.getReadableDatabase();
return this;
}

public SQLiteAdapter openToWrite() throws android.database.SQLException {
sqLiteHelper = new SQLiteHelper(context, MYDATABASE_NAME, null, MYDATABASE_VERSION);
sqLiteDatabase = sqLiteHelper.getWritableDatabase();
return this;
}

public void close(){
sqLiteHelper.close();
}

public long insert(String content){

ContentValues contentValues = new ContentValues();
contentValues.put(KEY_CONTENT, content);
return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues);
}

public int deleteAll(){
return sqLiteDatabase.delete(MYDATABASE_TABLE, null, null);
}

public Cursor queueAll(){
String[] columns = new String[]{KEY_ID, KEY_CONTENT};
Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE, columns,
null, null, null, null, null);

return cursor;
}

public List<Message> getAllMessages() {
String[] columns = new String[]{KEY_ID, KEY_CONTENT};
List<Message> messages = new ArrayList<Message>();

Cursor cursor = sqLiteDatabase.query(MYDATABASE_TABLE,
columns, null, null, null, null, null);

cursor.moveToFirst();
while (!cursor.isAfterLast()) {
Message message = cursorToMessage(cursor);
messages.add(message);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return messages;
}

public class SQLiteHelper extends SQLiteOpenHelper {

public SQLiteHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}

@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(SCRIPT_CREATE_DATABASE);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub

}

}

private Message cursorToMessage(Cursor cursor) {
Message message = new Message();
message.setId(cursor.getLong(0));
message.setMessage(cursor.getString(1));
return message;
}

}

这是 Message.java 代码:

package com.example.smsTest;

public class Message {
private long id;
private String message;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}

public String getMessage() {
return message;
}

public void setMessage(String message) {
this.message = message;
}

// Will be used by the ArrayAdapter in the ListView
@Override
public String toString() {
return message;
}
}

问题是 String body = msg.substring(msg.lastIndexOf(":")+1, msg.length()); 的值在这段代码时没有更新到 ListView 火 bodyarr.add(body); arrayAdpt.notifyDataSetChanged();。这段代码可以在 SMSReceiverActivity 类中找到。

这在我添加 sqlite 代码之前有效。

最佳答案

List在你的里面Adapter拥有 Message 的对象类型,以及 Activity 中字段的类型是List<String> .你传递的是 List<Message>AdapteronCreate() , 然后 onReceive()你要添加 StringList<String> .所以首先,这两个列表的类型不兼容,因此您将无法传递 List<String>。到 Adapter .其次,通过调用 bodyarr.add(body)您正在向 Activity's 添加一个项目Strings列表,这不会影响 Adapter以任何方式。所以你应该从修复类型不兼容开始,然后不要忘记调用 adapter.setItems(bodyarr)在此列表中添加内容以更新 Adapter 中的数据后.然后调用adapter.notifyDataSetChanged()会做的工作。希望这会有所帮助。

关于android - 无法向 ListView 添加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15918121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com