使用MVP Android将数据发布到服务器

问题描述 投票:0回答:1

我正在学习Android的MVP设计,我是新手,所以需要你宝贵的时间。我去了MVP的基础知识它是如何工作的,现在我卡住了所以需要你的帮助,我必须将数据发布到服务器,当我在演示者中硬编码值然后我得到响应正确但我需要数据当用户按下时,在LoginActivity视图中,该值应传递给演示者,演示者将该值传递给Retrofit并返回结果。这是我的尝试:

我们loginvstvity:

public class LoginActivity extends BaseActivity implements LoginView {

    @BindView(R.id.company_name)
    protected EditText companyName_et;

    @BindView(R.id.email)
    protected EditText email_et;

    @BindView(R.id.password)
    protected EditText password_et;

    @BindView(R.id.submit)
    protected Button submit_btn;

    @Inject
    LoginPresenter loginPresenter;


    @Override
    protected int getContentView() {
        return R.layout.login_activity;
    }

    @Override
    protected void onViewReady(Bundle savedInstanceState, Intent intent) {
        super.onViewReady(savedInstanceState, intent);
        submit_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String company=companyName_et.getText().toString();
                String username=email_et.getText().toString();
                String password=password_et.getText().toString();

                /*
                    I have to put the above String data
                    to my model class then i have to post the data to the server
                 */
                loginPresenter.passLoginDataToServer();
            }
        });

    }

    @Override
    public void onError(String s) {
        Toast.makeText(this, s, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSuccess(String s) {

    }

    @Override
    public void onResponse(Login login) {
        Log.e("-----",""+login.getUserId());
    }

    @Override
    protected void resolveDaggerDependency() {
        DaggerLoginComponent.builder().applicationComponent(getApplicationComponent()).loginModule(new LoginModule(this)).build().inject(this);
    }
}

这是Login Presenter:

public class LoginPresenter extends BasePresenter<LoginView>  implements Observer<Login>{

    @Inject
    CreateApiService createApiService;

    @Inject
    public LoginPresenter(){};

    public void  passLoginDataToServer(){
       /*
        when i hard code the data , i get the successful response.Like :
          String user="raj";
          String check="true";
          Map<String,String> headers=new HashMap();
          headers,put("xyz","pqr");
          Login loginObject = new Login("xyzs", "pqr","Qtch","mvp");
        */
       /*
       But I need the data here from my LoginActivity ? Dunno how to pass the data from LoginActivity to presenter
        */

       Observable<Login> loginObservable=createApiService.loginUser(user, check, headers, loginObject);
       subscribeToLogin(loginObservable,this);
   }

    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public void onNext(Login login) {
       getmView().onResponse(login);
    }

    @Override
    public void onError(Throwable e) {
        getmView().onError("Error "+e);
        Log.e("---",""+e);
    }

    @Override
    public void onComplete() {
        getmView().onSuccess("Successfully Loaded");
    }
}

这是我的界面:

public interface LoginView extends BaseView {

    void onError(String s);

    void onSuccess(String s);

    void onResponse(Login login);
}
android mvp rx-java2
1个回答
0
投票

你可以在方法中添加参数吗?

在您的活动中:

 @Override public void onClick(View view) {
                String company=companyName_et.getText().toString();
                String username=email_et.getText().toString();
                String password=password_et.getText().toString();

            loginPresenter.passLoginDataToServer(compay, username, password);
}

在您的演示者中:

    public void  passLoginDataToServer(String company, String username, String password){

       // Now create your request from the dynamic parameters

       Observable<Login> loginObservable=createApiService.loginUser(username, check, headers, loginObject);
       subscribeToLogin(loginObservable,this);
   }
© www.soinside.com 2019 - 2024. All rights reserved.