[英]How to Update row in SQLite Table using Model Class?
我是android編程的新手。 我整日都在這個問題上呆滯,到處尋找解決方案,通過其他問題和代碼示例,似乎沒有什么與我創建此應用程序的方法保持一致,作為一個初學者,我不得不承認我完全迷路了。 我的詞匯表中沒有很多技術術語,因此我一直在努力尋找自己想要的東西,希望有人可以幫助我指出正確的方向。 我正在嘗試更新teams
表中的一個單獨行,該行由id
, team_name
和image
組成,其中包含指向位於用戶設備上的圖像的文件路徑。
id | team_name | image
-------------------------
| |
下面是我用來更新行的方法
public int updateTeam(Team team) {
//get reference to writable DB
SQLiteDatabase db = this.getWritableDatabase();
//create ContentValues to add key "column"/value
ContentValues values = new ContentValues();
values.put("team_name", team.getTeamName()); // get team_name
values.put("path", team.getPath()); // get image
//updating row
int i = db.update(TEAMS_TABLE, //table
values, // column/value
ID + " = ?", // selections
new String[] {
String.valueOf(team.getId())
}); //selection args
//close
db.close();
//return
return i;
}
public class Team {
String team_name, path, league_name;
int id, league_id, points;
public Team(int keyId, String team_name, String path,
int points, String league_name) {
this.id = keyId;
this.team_name = team_name;
this.path = path;
this.points = points;
this.league_name = league_name;
}
public Team(int keyId, String team_name, String path) {
this.id = keyId;
this.team_name = team_name;
this.path = path;
}
public Team() {}
public Team(int keyId) {
this.id = keyId;
}
public int getId() {
return id;
}
public void setId(int keyId) {
this.id = keyId;
}
public int getLeagueId() {
return league_id;
}
public String getTeamName() {
return team_name;
}
public String getLeagueName() {
return league_name;
}
public void setLeagueName(String league_name) {
this.league_name = league_name;
}
public int getPoints() {
return points;
}
public void setPoints(int points) {
this.points = points;
}
public void setTeamName(String team_name) {
this.team_name = team_name;
}
public void setLeague_id(int league_id) {
this.league_id = league_id;
}
public void setPath(String path) {
this.path = path;
}
public String getPath() {
return path;
}
}
public class TeamImageAdapter extends ArrayAdapter < Team > {
Context context;
int layoutResourceId;
ArrayList < Team > data = new ArrayList < Team > ();
public TeamImageAdapter(Context context, int layoutResourceId, ArrayList < Team > data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.context = context;
this.data = data;
}
private final int THUMBSIZE = 200;
/**
* applying ViewHolder pattern to speed up ListView, smoother and faster
* item loading by caching view in A ViewHolder object
*/
private static class ViewHolder {
ImageView imgIcon;
TextView teamId, teamName, leagueName, points;
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.teamId = (TextView) row.findViewById(R.id.txtTeamId);
holder.teamName = (TextView) row.findViewById(R.id.txtTeamName);
holder.leagueName = (TextView) row.findViewById(R.id.txtLeagueName);
holder.points = (TextView) row.findViewById(R.id.txtPoints);
holder.imgIcon = (ImageView) row.findViewById(R.id.item_img_icon);
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
Team team = data.get(position);
holder.teamId.setText(String.valueOf(team.id));
holder.teamName.setText(team.team_name);
holder.leagueName.setText(team.league_name);
holder.points.setText("Points: " + String.valueOf(team.points));
//convert string to bitmap and set to thumbsize
holder.imgIcon.setImageBitmap(ThumbnailUtils
.extractThumbnail(BitmapFactory.decodeFile(team.getPath()),
THUMBSIZE, THUMBSIZE));
return row;
}
}
public class DisplayTeam extends AppCompatActivity {
ArrayList < Team > imageArry = new ArrayList < Team > ();
TeamImageAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_team);
DatabaseHelper myDb = new DatabaseHelper(this);
// Reading all teams from database
List < Team > team = myDb.getAllTeams();
for (Team tm: team) {
String log = "ID:" + tm.getId() + " Team Name: " + tm.getTeamName() + " ,Image: " + tm.getPath() + " ,Points: " + tm.getPoints() + " ,League Name: " + tm.getLeagueName();
// Writing teams to log
Log.d("Result: ", log);
//add teams data in arrayList
imageArry.add(tm);
}
adapter = new TeamImageAdapter(this, R.layout.teams_list,
imageArry);
final ListView dataList = (ListView) findViewById(R.id.main_list_view);
dataList.setAdapter(adapter);
dataList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView < ? > parent, View view, int position, long id) {
TextView tid = (TextView) view.findViewById(R.id.txtTeamId);
Long teamId = Long.valueOf(tid.getText().toString());
}
});
}
}
我想要這樣,以便當我單擊ListView時出現一個帶有EditText的彈出窗口,該彈出窗口顯示當前團隊team_name
。 我只是不確定它叫什么或如何執行此操作。 有點像這樣
還有更新代碼的外觀。 我並不是真的希望得到完整的代碼答案,而只是朝着正確的方向邁出了一步,逐步學習教程將非常有幫助。 任何幫助將不勝感激。
因為當您將適配器設置為列表時,它會從數據庫獲取記錄。 但是在更新該行之后,您無需更改適配器值。
因此聲明List < Team > team;
作為Activity
全局變量,請在onCreate
方法中將其初始化。
為適配器設置新值,並通知OnItemClickListener
方法中更改的數據集
dataList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView < ? > parent, View view, int position, long id) {
Team teamToUpdate = team.get(position);
int status = updateTeam(teamToUpdate);
if(status > 0) {
// update success
// change the adapter values here
imageArry.clear();
team = myDb.getAllTeams();
for (Team tm: team) {
String log = "ID:" + tm.getId() + " Team Name: " + tm.getTeamName() +
" ,Image: " + tm.getPath() + " ,Points: " + tm.getPoints() +
" ,League Name: " + tm.getLeagueName();
// Writing teams to log
Log.d("Result: ", log);
//add teams data in arrayList
imageArry.add(tm);
}
adapter.notifyDataSetChanged();
} else {
// failed to update
// check the reason
}
}
});
希望能對您有所幫助。
/*public int getId() {
return id;
}
*/
db.update(TEAMS_TABLE, values,
ID + " = ?", new String[] {
Integer.toString(team.getId())
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.