2017-03-20 1 views
0

putDate 메서드를 main으로 사용하여 dbManager 클래스에서 updateStudentDate라는 메서드를 사용하여 ID와 날짜를 가져옵니다. 저장 단추를 클릭하면 데이터베이스에서 가져온 ID와 현재 날짜가 updateStudentDate로 보내집니다. 하지만 오류가 발생합니다.ListView 및 사용자 지정 어댑터

이것은 주요 활동입니다.

public class StartAttendance extends AppCompatActivity implements View.OnClickListener{ 
    private DBManager dbManager; 
    private List<UserModel> students; 
    private String studentSubjectId; 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.start_attendance); 

     final Button save = (Button) findViewById(R.id.save); 
     final Button cancel = (Button) findViewById(R.id.cancel); 
     final ListView listOfTakeAtt = (ListView) findViewById(R.id.listOfTakingAttendance); 


     Intent intent = getIntent(); 
     studentSubjectId = intent.getStringExtra("studentSubjectId"); 


     dbManager = new DBManager(StartAttendance.this); 
     dbManager.open(); 
     ArrayList arrayList2 = dbManager.getAllStudentsName(Integer.valueOf(studentSubjectId));//Get the names from database. 


     students = new ArrayList<>(); 

     setData(arrayList2); 


     final CustomLayoutOfTakingAttendance adapter = new CustomLayoutOfTakingAttendance(this, students); 
     listOfTakeAtt.setAdapter(adapter); 

     listOfTakeAtt.setDividerHeight(17); 


     cancel.setOnClickListener(this); 
     save.setOnClickListener(this); 


     listOfTakeAtt.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 

       UserModel model = students.get(i); 

       int y=model.isSelected?1:0; 

       model.setSelected(true); 

       students.set(i, model); 


       if(y==1){ 
        model.setSelected(false); 
       } 


       adapter.updateRecords(students); 
      } 
     }); 
    } 

    public void setData(ArrayList arrayList2){ 
     for(int i=0;i<arrayList2.size();i++){ 
      students.add(new UserModel(false, (String) arrayList2.get(i))); 
     } 
    } 


    @Override 
    public void onClick(View v){ 
      switch (v.getId()){ 
       //When save button is clicked i want to see present radioButton is checked or not for each item. 
       //if checked save current date into database for this id. 
     case R.id.save: 
      putDate(); 
      break; 

     case R.id.cancel: 
       Intent i=new Intent(StartAttendance.this,ContentOfEachSubject.class); 
       i.putExtra("studentSubjectId",studentSubjectId); 
       startActivity(i); 
       break; 
     } 
} 

    public void putDate(){ 
     SimpleDateFormat DateFormat=new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()); 
     Date d=new Date(); 
     String date=DateFormat.format(d); 

     boolean isUpdated=false; 
     UserModel model; 
      ArrayList arrayList1 = dbManager.getAllStudentsId(Integer.valueOf(studentSubjectId));//Get the ids from the database. 
      for(int i=0;i<students.size();i++) 
      { 
       model = students.get(i); 

       if(model.isSelected){ 
        dbManager = new DBManager(StartAttendance.this); 
        dbManager.open(); 
        isUpdated = dbManager.UpdateStudentDate((Integer) arrayList1.get(i), date); 
       } 
      } 

     if(isUpdated){Toast.makeText(StartAttendance.this,"You took attendance successfully..",Toast.LENGTH_SHORT);} 

     else {Toast.makeText(StartAttendance.this,"Fail while getting attendance!!",Toast.LENGTH_SHORT);} 
    } 
} 

UserModel 클래스

public class UserModel { 

    boolean isSelected; 
    String name; 


    public UserModel(boolean isSelected,String name) { 
     this.isSelected = isSelected; 
     this.name=name; 
    } 

    public boolean isSelected() { 
     return isSelected; 
    } 

    public void setSelected(boolean selected) { 
     isSelected = selected; 
    } 



    public String getStudentName() { 
     return name; 
    } 

    public void setStudentName(String name) { 
     this.name = name; 
    } 

} 

dbManager 클래스

public boolean UpdateStudentDate(int id,String date){ 
     ContentValues cv=new ContentValues(); 
     cv.put(DatabaseHelper.KEY_STUDENT_DATE,date); 
     long result=database.update(DatabaseHelper.STUDENT_TABLE,cv,DatabaseHelper.KEY_STUDENT_ID+" = "+id,null); 
     databaseHelper.close(); 
     if(result==-1){return false;} 

     else return true; 
    } 
+0

오류가 설명 된 로그를 제공 할 수 있습니까? – jpact

+0

Bro 버튼을 클릭하면 앱이 자동으로 중지되며 오류는 표시되지 않습니다. –

+0

심지어 logcat이 비어 있습니까? (Android Montior 탭) – jpact

답변

0

당신은 getAllStudentsId(int id) 방법의 구현에 오류가 있습니다. ID가 Integer 유형이라고 가정하면 ArrayList이 아니라 ArrayList<Integer>을 반환하는 메소드 서명을 변경하는 것이 좋습니다. List<Integer>과 같이 일반적인 유형의 목록을 반환하는 것이 더 좋습니다.

그러나이 방법에서는 Integer 대신에 String 콜렉션을 추가하는 것이 가장 큰 문제입니다.

arrayList.add(cursor.getString(cursor.getColumnIndex(Databas‌​eHelper.KEY_STUDENT_‌​ID))); 
나는 데이터가 사용자의 ID를 숫자 또는 VARCHAR 형식인지, DB에 유지,하지만 난 그게 그런

cursor.getInt(...)cursor.getString(...)을 변경하기에 충분해야한다 생각하는 방법을 모른다

,이 방법의 구현 또한

public List<Integer> getAllStudentsId(int id){ 
    List<Integer> result =new ArrayList<>(); 
    String[] columns = new String[]{DatabaseHelper.KEY_STUDENT_ID}; 
    Cursor cursor = database.query(DatabaseHelper.STUDENT_TABLE, columns, D‌​atabaseHelper.KEY_ST‌​UDENT_SUBJECT_ID + " = " + id, null, null,null,null); 

    while(cursor.moveToNext()){ 
     result.add(cursor.getInt(cursor.getColumnIndex(Databas‌​eHelper.KEY_STUDENT_‌​ID))); 
    } 
    return result; 
} 

처럼 될 수 StartAttendance.java 클래스 내에서 목록의 유형을 변경하는 것을 잊지 마세요.

List<Integer> arrayList1 = dbManager.getAllStudentsId(Integer.valueOf(studentSubjectId));//Get the ids from the database. 
+0

<3 <3 형제, 오류를 발견해 주셔서 감사합니다. 감사합니다. –

+0

그냥 대답을 upvote하고 올바른 하나를 표시 :) 당신은 환영합니다 – jpact

+0

죄송합니다 형제 지금은 15 명성을하지 않은, 나중에 할 것이다 :) 감사합니다. –

관련 문제