在 Edit_WorkDetails 活动中,它有一个ListView
,其中实际从SQLite
检索数据。点击列表后,它会intent
到 Edit_Details 进行修改。
这就是我的 Edit_WorkDetails 活动的样子。
点击Edit_Details中的保存按钮后,应用程序崩溃了。
Edit_WorkDetails
listViewUpdate.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> listView, View view,
int position, long id) {
mClickedPosition=position; // update
// Get the cursor, positioned to the corresponding listview_item_row in the result set
Cursor cursor = (Cursor) listView.getItemAtPosition(position);
// Get the state's capital from this listview_item_row in the database.
ID =
cursor.getLong(cursor.getColumnIndexOrThrow("_id"));
Intent intent = new Intent(getActivity(), Edit_Details.class);
intent.putExtra("ID", ID);
startActivityForResult(intent, PROJECT_REQUEST_CODE);
}
});
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) { // receive from Edit_Details and populate ListView
if (resultCode == Activity.RESULT_OK) {
if(requestCode==PROJECT_REQUEST_CODE) {
ReceiveProject = data.getStringExtra("project1");
ReceiveDescription = data.getStringExtra("description");
ReceiveProgress = data.getIntExtra("progress", 0);
ReceiveTimeIn = data.getStringExtra("timeIn");
ReceiveTimeOut = data.getStringExtra("timeOut");
if (mClickedPosition == -1) { // if icon clicked
if (objCustomBaseAdapter != null)
objCustomBaseAdapter.addNewItem(ReceiveProject, ReceiveDescription, ReceiveProgress, ReceiveTimeIn, ReceiveTimeOut);
} else { // update list
if (objCustomBaseAdapter != null)
objCustomBaseAdapter.changeItem(mClickedPosition, ReceiveProject, ReceiveDescription, ReceiveProgress, ReceiveTimeIn, ReceiveTimeOut);
}
}
}
}
Edit_Details.java
save.setOnClickListener(new View.OnClickListener() { // return values to Edit_WorkDetails and update the list
@Override
public void onClick(View v) {
Intent returnIntent = new Intent();
project1 = Project2.getSelectedItem().toString();
description = Description.getText().toString();
progress = seekBar.getProgress();
returnIntent.putExtra("project1", project1);
returnIntent.putExtra("description", description);
returnIntent.putExtra("progress", progress);
Toast.makeText(getApplicationContext(), progress + "", Toast.LENGTH_LONG).show();
returnIntent.putExtra("timeIn", timeIn);
returnIntent.putExtra("timeOut", timeOut);
setResult(Activity.RESULT_OK, returnIntent);
finish();
}
});
}
CustomBaseAdapter
public void changeItem(int mPosition,String Project,String Description,int Percentage,String TimeIn,String TimeOut)
{
SearchResults obj = new SearchResults();
obj.setProject(Project);
obj.setDescription(" Work Description : " + Description);
obj.setProgress(" Progress : " + Percentage);
obj.setTimeIn(" Time In : " + TimeIn);
obj.setTimeOut(" Time Out : " + TimeOut);
searchArrayList.set(m,obj);
this. notifyDataSetChanged();
}
最后 SearchResult.java
public class SearchResults {
private String weather = "";
private String date = "";
private String status = "";
private String timeIn="";
private String timeOut="";
private String project="";
private String description="";
private String progress="";
public void setWeather(String weather) {
this.weather = weather;
}
public String getWeather() {
return weather;
}
public void setDate(String date) {
this.date = date;
}
public String getDate() {
return date;
}
public void setStatus(String status) {
this.status = status;
}
public String getStatus() {
return status;
}
public void setTimeIn(String timeIn) {
this.timeIn = timeIn;
}
public String getTimeIn() {
return timeIn;
}
public void setTimeOut(String timeOut){
this.timeOut=timeOut;
}
public String getTimeOut()
{
return timeOut;
}
public void setProject(String project){
this.project=project;
}
public String getProject()
{
return project;
}
public void setProgress(String progress){
this.progress=progress;
}
public String getProgress()
{
return progress;
}
public void setDescription(String description){
this.description=description;
}
public String getDescription()
{
return description;
}
}
错误logCat
Process: com.example.project.myapplication, PID: 2467
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=196609, result=-1, data=Intent { (has extras) }} to activity {com.example.project.myapplication/com.example.project.myapplication.GUI.ActivityB}: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0
at android.app.ActivityThread.deliverResults(ActivityThread.java:3699)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3742)
(适用CustomBaseAdapter.java:101)
searchArrayList.set(m,obj);
(适用Edit_WorkDetails.java:141)
objCustomBaseAdapter.changeItem(mClickedPosition, ReceiveProject, ReceiveDescription, ReceiveProgress, ReceiveTimeIn, ReceiveTimeOut);
为什么我会收到这样的错误?无法将检索到的值从SQLite
编辑为ListView
?
数据库模型
db.execSQL("create table " + TABLE_WORKDETAILS + "( " + ID1 + " INTEGER PRIMARY KEY , Project TEXT, WorkDescription TEXT, Percentage Text, TimeIn DATETIME, TimeOut DATETIME, Twd_id INTEGER, FOREIGN KEY(Twd_id) REFERENCES "+TABLE_INFO+"(_id) )" );
注意到Twd_id是foreign key
。
这是我的workDetails表
现在我在 Edit_WorkDetails
中检索了workDetails表数据Edit_WorkDetails
Bundle bundle = this.getArguments();
if(getArguments()!=null)
{
ID=bundle.getLong("ID"); // ID holds value 1
BuildEditDetails(ID);
}
public void BuildEditDetails(long ID)
{
final long id=ID;
sqlcon.open();
Cursor cursor=sqlcon.readData(id);
String[] columns=new String[]{MyDatabaseHelper.Project,MyDatabaseHelper.WorkDescription,MyDatabaseHelper.Percentage
,MyDatabaseHelper.TimeIn,MyDatabaseHelper.TimeOut};
int[] to=new int[]
{
R.id.Project,R.id.Description,R.id.Percentage,R.id.in,R.id.out
};
dataAdapter = new SimpleCursorAdapter(getActivity(), R.layout.retrieve_details, cursor, columns, to, 0);
listViewUpdate.setAdapter(dataAdapter);
}
以下代码可以参考上面的代码
答案 0 :(得分:1)
您可以通过执行类似customListAdapter.setListData(getListData())的更新列表视图数据;
customListAdapter.notifyDataSetChanged();基本上当你调用add()
时,数据已添加但未刷新,请尝试调用notifyondatasetchanged()
如果无效,请调用myListView.invalidateViews();
它将重新绘制listview