Android MVP 모드 실전 강좌

9810 단어 AndroidMVP
MVP
인터넷 에서 자 료 를 찾 아 다음 과 같이 정리 했다.
MVP 는 모델(Model),보기(View),사회자(Presenter)의 줄 임 말로 각각 항목 의 3 개의 서로 다른 모듈 을 대표 한다.
모델(Model):데이터 의 로드 나 저장 을 처리 합 니 다.예 를 들 어 네트워크 나 로 컬 데이터 베이스 에서 데 이 터 를 가 져 오 는 등;
보기(View):인터페이스 데이터 의 전 시 를 책임 지고 사용자 와 상호작용 을 합 니 다.
사회자(Presenter):코 디 네 이 터 에 해당 하 는 모델 과 보기 사이 의 다리 로 모델 과 보 기 를 분리 합 니 다.
아래 그림 에서 보 듯 이 View 와 Model 은 직접적인 상호작용 이 아니 라 Presenter 를 View 와 Model 간 의 교량 으로 사용한다.그 중에서 Presenter 는 Viwe 층 과 Model 층 의 Interface 인용 을 동시에 가지 고 있 고 View 층 은 Presenter 층 Interface 의 인용 을 가지 고 있다.View 층 의 한 인터페이스 가 일부 데 이 터 를 보 여 줘 야 할 때 먼저 Presenter 층 의 특정한 인 터 페 이 스 를 호출 한 다음 에 Presenter 층 은 Model 층 의 요청 데 이 터 를 호출 합 니 다.Model 층 데이터 로드 가 성공 한 후에 Presenter 층 의 리 턴 방법 으로 Presenter 층 데이터 로드 가 완료 되 었 음 을 알 립 니 다.마지막 으로 Presenter 층 은 View 층 의 인 터 페 이 스 를 호출 하여 로드 된 데 이 터 를 사용자 에 게 보 여 줍 니 다.이것 이 MVP 모델 의 전체 핵심 과정 이다.

MVP 모드 에는 보통 4 가지 요소 가 포함 되 어 있 습 니 다.
     (1)View:UI 요 소 를 그립 니 다.사용자 와 상호작용 을 합 니 다(Android 에서 Activity 로 나타 납 니 다).
     (2)View interface:View 가 실현 해 야 하 는 인터페이스,View 는 View interface 와 Presenter 를 통 해 상호작용 을 하고 결합 을 낮 추어 단원 테스트 를 편리 하 게 한다.
     (3)모델:데 이 터 를 저장,검색,조작 하 는 것 을 책임 집 니 다(가끔 은 Model interface 를 실현 하여 결합 을 낮 춥 니 다).
     (4)Presenter:View 와 Model 의 상호작용 의 중간 유대 로 서 사용자 와 의 상호작용 을 처리 하 는 책임 논리.

2.MVP 모드 의 사용

위의 간단 한 MVP 모드 의 UML 그림 은 그림 에서 알 수 있 듯 이 MVP 를 사용 하려 면 적어도 다음 과 같은 절 차 를 거 쳐 야 한다.
1.IPresenter 인 터 페 이 스 를 만 들 고 모든 업무 논리의 인 터 페 이 스 를 여기에 두 고 Presenter Compl 를 실현 합 니 다.(여기 서 업무 기능 을 편리 하 게 볼 수 있 습 니 다.인 터 페 이 스 는 여러 가지 실현 이 가능 하기 때문에 유닛 테스트 도 편리 합 니 다)
2.IView 인 터 페 이 스 를 만 들 고 모든 보기 논리의 인 터 페 이 스 를 여기에 놓 습 니 다.사실은 현 류 는 현재 Activity/Fragment 입 니 다.
3.UML 그림 을 통 해 알 수 있 듯 이 Activity 에는 IPresenter 가 포함 되 어 있 고 Presenter Compl 에는 IView 가 포함 되 어 있 으 며 Model 에 의존 하고 있다.Activity 에 서 는 IPresenter 에 대한 호출 만 보류 하고 다른 작업 은 모두 Presenter Compl 에 남아 서 이 루어 집 니 다.
4.모델 은 꼭 있어 야 하 는 것 은 아니 지만 반드시 View 와 Presenter 가 있 을 것 이다.
3.간단 한 MVP 예제
간단 한 사용자 로그 인 실현
효 과 는 다음 과 같 습 니 다:

먼저 자바 파일 의 디 렉 터 리 구 조 를 살 펴 보 겠 습 니 다.

1.Baen 가방
UserBean

package com.example.mvpe.bean; 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public class UserBean { 
 private String username; 
 private String userpwd; 
 
 public UserBean() { 
 } 
 
 public UserBean(String username, String userpwd) { 
 this.username = username; 
 this.userpwd = userpwd; 
 } 
 
 public String getUsername() { 
 return username; 
 } 
 
 public void setUsername(String username) { 
 this.username = username; 
 } 
 
 public String getUserpwd() { 
 return userpwd; 
 } 
 
 public void setUserpwd(String userpwd) { 
 this.userpwd = userpwd; 
 } 
} 

2.Model 패키지
IUserModel 클래스

package com.example.mvpe.model; 
 
import com.example.mvpe.bean.UserBean; 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public interface IUserModel { 
 
 void setSid(int cid); 
 UserBean load(int sid); 
 void setUsername(String username); 
 void setUserpwd(String userpwd); 
} 

UserModelimp 클래스

package com.example.mvpe.model; 
 
import android.provider.Settings; 
import android.util.Log; 
import android.util.SparseArray; 
 
import com.example.mvpe.bean.UserBean; 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public class UserModelimp implements IUserModel{ 
 
 private static final String ACTIVITY_TAG="UserModelimp"; 
 private String username; 
 private String userpwd; 
 private int sid; 
 private SparseArray<UserBean> su=new SparseArray<UserBean>(); 
 
 @Override 
 public void setSid(int cid) { 
 sid=cid; 
 } 
 
 @Override 
 public UserBean load(int sidy) { 
 sid=sidy; 
 UserBean ub=su.get(sid,new UserBean("not found", 
  "not found")); 
 return ub; 
 } 
 
 
 @Override 
 public void setUsername(String usernamey) { 
 username=usernamey; 
 } 
 
 @Override 
 public void setUserpwd(String userpwdy) { 
 userpwd=userpwdy; 
 UserBean usb=new UserBean(username,userpwd); 
 System.out.print(username+"----"+userpwd+"----"+sid); 
 Log.d(UserModelimp.ACTIVITY_TAG, "Start_OK"+username+"----"+userpwd+"----"+sid); 
 su.append(sid,usb); 
 } 
} 

3.persenter 패키지
UserPersenter 클래스

package com.example.mvpe.presenter; 
 
import android.util.Log; 
import android.view.View; 
 
import com.example.mvpe.bean.UserBean; 
import com.example.mvpe.model.IUserModel; 
import com.example.mvpe.model.UserModelimp; 
import com.example.mvpe.view.IUserView; 
 
 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public class UserPersenter { 
 
 private static final String ACTIVITY_TAG="UserPersenter"; 
 
 private IUserView iUserView; 
 private IUserModel iUserModel; 
 
 public UserPersenter(IUserView view){ 
 iUserView=view; 
 iUserModel=new UserModelimp(); 
 } 
 
 public void saveuser(int sid,String username,String userpwd){ 
 iUserModel.setSid(sid); 
 iUserModel.setUsername(username); 
 iUserModel.setUserpwd(userpwd); 
 } 
 
 public void loaduser(int sid){ 
 UserBean usb=iUserModel.load(sid); 
 Log.d(ACTIVITY_TAG, "loaduser: "+usb.getUsername()); 
 iUserView.setUsername(usb.getUsername()); 
 iUserView.setUserpwd(usb.getUserpwd()); 
 } 
 
} 

4.뷰 백
IUserView 클래스

package com.example.mvpe.view; 
 
import com.example.mvpe.bean.UserBean; 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public interface IUserView { 
 
 int getID(); 
 
 void setUsername(String username); 
 void setUserpwd(String userpwd); 
 
 String getUserpwd(); 
 String getUsername(); 
} 
UserActivity 클래스

package com.example.mvpe.view; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
 
import com.example.mvpe.R; 
import com.example.mvpe.presenter.UserPersenter; 
import android.view.View.OnClickListener; 
import android.widget.Toast; 
 
/** 
 * Created by fendo on 2017/4/29. 
 */ 
 
public class UserActivity extends Activity implements OnClickListener,IUserView{ 
 
 private EditText userid; 
 private EditText username; 
 private EditText userpwd; 
 private Button read; 
 private Button write; 
 private UserPersenter usp; 
 
 @Override 
 protected void onCreate(Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 usp=new UserPersenter(this); 
 setContentView(R.layout.activity_main); 
 findviewbyid(); 
 read.setOnClickListener(this); 
 write.setOnClickListener(this); 
 } 
 
 
 public void findviewbyid(){ 
 userid= (EditText) findViewById(R.id.userid); 
 username= (EditText) findViewById(R.id.usertext); 
 userpwd= (EditText) findViewById(R.id.userpwd); 
 read= (Button) findViewById(R.id.read); 
 write= (Button) findViewById(R.id.write); 
 } 
 
 @Override 
 public int getID() { 
 return Integer.parseInt(userid.getText().toString()); 
 } 
 
 @Override 
 public void setUsername(String usernamcc) { 
 username.setText(usernamcc); 
 } 
 
 @Override 
 public void setUserpwd(String userpw) { 
 userpwd.setText(userpw); 
 } 
 
 @Override 
 public String getUserpwd() { 
 return userpwd.getText().toString(); 
 } 
 
 @Override 
 public String getUsername() { 
 return username.getText().toString(); 
 } 
 
 
 @Override 
 public void onClick(View view) { 
 switch (view.getId()) { 
  case R.id.read : 
  usp.loaduser(getID()); 
  Toast.makeText(getApplicationContext(), "    "+getID(), Toast.LENGTH_SHORT).show(); 
 
  break; 
  case R.id.write: 
  usp.saveuser(getID(),getUsername(),getUserpwd()); 
  Toast.makeText(getApplicationContext(), "    "+getID()+"--"+getUsername()+"--"+getUserpwd(), Toast.LENGTH_SHORT).show(); 
  break; 
 } 
 } 
} 
View 는 사용자 와 의 상호작용 만 처리 하고 데이터 와 관련 된 논리 적 조작 을 모두 Presenter 에 던 져 서 하 는 것 을 볼 수 있다.Presenter 는 Model 을 호출 하여 데 이 터 를 처리 한 후 IUserView 를 통 해 View 에 표 시 된 정 보 를 업데이트 합 니 다.
다운로드:소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기