반응형
예제 출처 : https://www.inflearn.com/course
이전예제
이번에는 저번 강의때 했던 회원목록을 출력후 회원 삭제 기능을 추가하는 예제입니다.
- 먼저 관리자 계정인 admin 계정으로 로그인을 합니다.
- 그 다음 MANAGE 버튼을 눌러 관리자페이지로 들어갑니다.
- 다음과 같이 현재 계정리스트를 출력하고 바로 옆에 삭제 버튼이 있습니다. 삭제 버튼을 누르면
- 해당 계정은 삭제하게 됩니다.
- 실제 데이터베이스를 봐도 admin계정을 제외하고 gakari1계정만 남아있는 것을 볼 수 있습니다.
예제
- 먼저 다음의 레이아웃을 만들기 위해 user.xml 파일을 수정합시다.
user.xml
<?xml version="1.0" encoding="utf-8"?>
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
android:background="#ffffff"
>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="삭제"
android:background="#00a7f5"
android:textColor="#fff"
android:textSize="18dp"
android:id="@+id/deleteButton"
/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:paddingBottom="5dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userID"
android:text="ID"
android:textSize="20dp"
android:textColor="#00a7f5"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userPassword"
android:text="PASSWORD"
android:textSize="20dp"
android:textColor="#f92a3f"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userName"
android:text="NAME"
android:textSize="16dp"
android:textColor="#a902f0"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/userAge"
android:text="AGE"
android:textSize="18dp"
android:textColor="#00a7f5"
/>
</LinearLayout>
</LinearLayout>
- 다음과 같이 Volley라이브러리를 사용하기 위해 StringRequest를 상속받아 POST방식으로 값을 넘겨줄 URL과 변수들을 설정합니다.
package com.example.kch.proj_manager_v7;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;
import java.util.HashMap;
import java.util.Map;
/**
* Created by kch on 2018. 4. 8..
*/
public class DeleteRequest extends StringRequest{
//현재 안드로이드앱을 에뮬레이터로 돌리므로 에뮬레이터가 설치된 서버에 있는 아파치 서버에 접근하려면
//다음과 같이 10.0.2.2:포트번호 로 접근해야합니다 저는 8080 포트를 써서 다음과 같이 했습니다
private Map<String, String> parameters;
public DeleteRequest(String userID, Response.Listener<String> listener){
super(Request.Method.POST, URL, listener, null);//Post방식임
parameters = new HashMap<>();//해쉬맵 생성후 parameters 변수에 값을 넣어줌
parameters.put("userID", userID);
}
@Override
protected Map<String, String> getParams() throws AuthFailureError {
return parameters;
}
}
- 위 실행화면에서 각 리스트뷰에 버튼을 추가했는데 그 버튼을 선언 후 리스너를 등록해줍니다. 이때 버튼이 눌리면 PHP서버로 넘겨줄 데이터를 설정해줍니다.
package com.example.kch.proj_manager_v7;
import android.app.Activity;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;
import org.json.JSONObject;
import java.util.List;
/**
* Created by kch on 2018. 2. 17..
*/
public class UserListAdapter extends BaseAdapter {
private Context context;
private List<User> userList;
private Activity parentActivity;//회원삭제 강의때 추가
//여기서 Actvitivy parentActivity가 추가됨 회원삭제 및 관리자기능 예제
public UserListAdapter(Context context, List<User> userList, Activity parentActivity){
this.context = context;
this.userList = userList;
this.parentActivity = parentActivity;//회원삭제 강의때 추가
}
//출력할 총갯수를 설정하는 메소드
@Override
public int getCount() {
return userList.size();
}
//특정한 유저를 반환하는 메소드
@Override
public Object getItem(int i) {
return userList.get(i);
}
//아이템별 아이디를 반환하는 메소드
@Override
public long getItemId(int i) {
return i;
}
//가장 중요한 부분
//int i 에서 final int i 로 바뀜 이유는 deleteButton.setOnClickListener에서 이 값을 참조하기 때문
@Override
public View getView(final int i, View view, ViewGroup viewGroup) {
View v = View.inflate(context, R.layout.user, null);
//뷰에 다음 컴포넌트들을 연결시켜줌
//final추가 안붙이면 에러남 리스너로 전달하고 싶은 지역변수는 final로 처리해야됨
final TextView userID = (TextView)v.findViewById(R.id.userID);
TextView userPassword = (TextView)v.findViewById(R.id.userPassword);
TextView userName = (TextView)v.findViewById(R.id.userName);
TextView userAge = (TextView)v.findViewById(R.id.userAge);
userID.setText(userList.get(i).getUserID());
userPassword.setText(userList.get(i).getUserPassword());
userName.setText(userList.get(i).getUserName());
userAge.setText(userList.get(i).getUserAge());
//이렇게하면 findViewWithTag를 쓸 수 있음 없어도 되는 문장임
v.setTag(userList.get(i).getUserID());
//삭제 버튼 객체 생성
Button deleteButton = (Button)v.findViewById(R.id.deleteButton);
deleteButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
//4. 콜백 처리부분(volley 사용을 위한 ResponseListener 구현 부분)
Response.Listener<String> responseListener = new Response.Listener<String>(){
@Override
public void onResponse(String response) {
try{
JSONObject jsonResponse = new JSONObject(response);
boolean success = jsonResponse.getBoolean("success");
//받아온 값이 success면 정상적으로 서버로부터 값을 받은 것을 의미함
if(success){
userList.remove(i);//리스트에서 해당부분을 지워줌
notifyDataSetChanged();//데이터가 변경된 것을 어댑터에 알려줌
}
}
catch(Exception e){
e.printStackTrace();
}
}
};
//volley 사용법
//1. RequestObject를 생성한다. 이때 서버로부터 데이터를 받을 responseListener를 반드시 넘겨준다.
//위에서 userID를 final로 선언해서 아래 처럼 가능함
DeleteRequest deleteRequest = new DeleteRequest(userID.getText().toString(), responseListener);
//2. RequestQueue를 생성한다.
//여기서 UserListAdapter는 Activity에서 상속받은 클래스가 아니므로 Activity값을 생성자로 받아서 사용한다
RequestQueue queue = Volley.newRequestQueue(parentActivity);
//3. RequestQueue에 RequestObject를 넘겨준다.
queue.add(deleteRequest);
}//onclick
});
//만든뷰를 반환함
return v;
}
}
- 마지막으로 PHP 서버에서 Delete.php를 만들어줍시다.
<?php
$con = mysqli_connect('localhost', 'root', 'qwer1234', 'proj_manager');
$userID = $_POST["userID"];
$statement = mysqli_prepare($con, "DELETE FROM USER WHERE userID = ?");
mysqli_stmt_bind_param($statement, "s", $userID);
mysqli_stmt_execute($statement);
//배열 선언 후
$response = array();
//success에 true라는 값을 넣어줌
$response["success"] = true;
echo json_encode($response);
?>
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 - 2. 수강신청앱 수강신청앱 회원가입 화면 만들기 (0) | 2018.04.28 |
---|---|
안드로이드 - 1. 수강신청앱 수강신청앱 로그인 화면 만들기 (1) | 2018.04.24 |
안드로이드 - 프로젝트9. 디자인을 예쁘게 꾸미기 (0) | 2018.04.15 |
안드로이드 - 프로젝트8. 회원 검색 기능 추가 (1) | 2018.04.13 |
안드로이드 - 프로젝트6. 회원목록을 리스트뷰로 출력하기 (1) | 2018.02.17 |
안드로이드 - 프로젝트5. 회원목록 출력하기 (0) | 2018.02.17 |
안드로이드 - 프로젝트4. 로그인 및 메인 화면 구현 (14) | 2017.12.30 |
안드로이드 - 프로젝트3. 데이터베이스 및 서버 구축 (20) | 2017.12.24 |