簡體   English   中英

如何使用模型類更新SQLite表中的行?

[英]How to Update row in SQLite Table using Model Class?

我是android編程的新手。 我整日都在這個問題上呆滯,到處尋找解決方案,通過其他問題和代碼示例,似乎沒有什么與我創建此應用程序的方法保持一致,作為一個初學者,我不得不承認我完全迷路了。 我的詞匯表中沒有很多技術術語,因此我一直在努力尋找自己想要的東西,希望有人可以幫助我指出正確的方向。 我正在嘗試更新teams表中的一個單獨行,該行由idteam_nameimage組成,其中包含指向位於用戶設備上的圖像的文件路徑。

團隊表數據庫設計

id  | team_name  | image
-------------------------
    |            |      

下面是我用來更新行的方法

updateTeam方法

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;
 }
}

TeamImageAdapter類

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;
 }
}

DisplayTeam類(在ListView中顯示所有團隊)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM