Android 如何通过改造实现登录?

Android 如何通过改造实现登录?,android,json,retrofit,Android,Json,Retrofit,我正在开发一个经过改装的应用程序。 我是新开发的登录与改造 我的登录JSON代码: { "login": [ { "sessionid": 12973, "responsetypes": "success" } ] } 如何实现这种类型JSON的登录? 下面是我的代码:它给onresponse方法带来了错误。我如何解决这个问题 公共类Login

我正在开发一个经过改装的应用程序。
我是新开发的登录与改造

我的登录JSON代码:

{
        "login": [
            {
                "sessionid": 12973,
                "responsetypes": "success"
            }
        ]
    }
如何实现这种类型JSON的登录? 下面是我的代码:它给onresponse方法带来了错误。我如何解决这个问题

公共类LoginActivity扩展了AppCompatActivity实现了View.OnClickListener{

private AppCompatButton btn_login;
private EditText et_email,et_password;
private TextView tv_register;
private ProgressBar progress;
private SharedPreferences pref;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    pref = LoginActivity.this.getPreferences(0);

    btn_login = (AppCompatButton)findViewById(R.id.btn_login);
    tv_register = (TextView)findViewById(R.id.tv_register);
    et_email = (EditText)findViewById(R.id.et_email);
    et_password = (EditText)findViewById(R.id.et_password);

    progress = (ProgressBar)findViewById(R.id.progress);

    btn_login.setOnClickListener(this);
    tv_register.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()){

        case R.id.tv_register:
            goToRegister();
            break;

        case R.id.btn_login:
            String email = et_email.getText().toString();
            String password = et_password.getText().toString();

            if(!email.isEmpty() && !password.isEmpty()) {

                progress.setVisibility(View.VISIBLE);
                loginProcess(email,password);

            } else {

                Toast.makeText(LoginActivity.this, "Fields are empty !", Toast.LENGTH_LONG).show();
            }
            break;

    }
}
private void loginProcess(String userID,String password){

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    RequestInterface requestInterface = retrofit.create(RequestInterface.class);

    User user = new User();
    user.setEmail(userID);
    user.setPassword(password);
    ServerRequest request = new ServerRequest();
    request.setOperation(Constants.LOGIN_OPERATION);
    request.setUser(user);
    Call<ServerResponse> response = requestInterface.operation(request);

    response.enqueue(new Callback<ServerResponse>() {
        @Override
        public void onResponse(Call<ServerResponse> call, retrofit2.Response<ServerResponse> response) {

            ServerResponse resp = response.body();
            Toast.makeText(LoginActivity.this, resp.getMessage(), Toast.LENGTH_LONG).show();

            if(resp.getResult().equals(Constants.SUCCESS)){
                SharedPreferences.Editor editor = pref.edit();
                editor.putBoolean(Constants.IS_LOGGED_IN,true);

                editor.putString(Constants.EMAIL,resp.getUser().getEmail());
             //   editor.putString(Constants.NAME,resp.getUser().getName());
                editor.putString(Constants.UNIQUE_ID,resp.getUser().getUnique_id());
                editor.apply();
                goToProfile();

            }
            progress.setVisibility(View.INVISIBLE);
        }

        @Override
        public void onFailure(Call<ServerResponse> call, Throwable t) {

            progress.setVisibility(View.INVISIBLE);
            Log.d(Constants.TAG,"failed");
            //Snackbar.make(getV, t.getLocalizedMessage(), Snackbar.LENGTH_LONG).show();

        }
    });
}

private void goToRegister(){

    Intent i = new Intent(LoginActivity.this, RegisterActivity.class);
    startActivity(i);
}

private void goToProfile(){

    Intent i = new Intent(LoginActivity.this, MainActivity.class);
    startActivity(i);
}
}

// 公共类服务器请求{

private String operation;
private User user;

public void setOperation(String operation) {
    this.operation = operation;
}

public void setUser(User user) {
    this.user = user;
}
}

//公共类服务器响应{

private String result;
private String message;
private User user;

public String getResult() {
    return result;
}

public String getMessage() {
    return message;
}

public User getUser() {
    return user;
}
}

//

公共类登录{

@SerializedName("sessionid")
@Expose
private Integer sessionid;
@SerializedName("responsetypes")
@Expose
private String responsetypes;

public Integer getSessionid() {
    return sessionid;
}

public void setSessionid(Integer sessionid) {
    this.sessionid = sessionid;
}

public String getResponsetypes() {
    return responsetypes;
}

public void setResponsetypes(String responsetypes) {
    this.responsetypes = responsetypes;
}

}

查看代码后,请参阅流程的步骤2并更改ServerResponse类。您没有正确映射响应

您需要采取以下步骤在改装中实施任何类型的API:

  • 制作一个接口,定义您的终端,其中包括响应和请求

    public interface MyClient { 
    @FromUrlEncoded 
    @POST("your/login/end/point/")
    Call<RequestClass> login(@String("username") String username, other post parameters);
    }
    
  • 将其应用于要将请求发送到服务器的位置

    // Create a very simple REST adapter which points the GitHub API endpoint.
    RestClient client =  retrofit.create(GitHubClient.class);
    
    // Call the API
    Call<ResponseClass> call =  client.login(parameter_of_login_call);
    
    call.enqueue(new Callback<ResponseClass>() {  
    @Override
    public void onResponse(Call<ResponseClass> call, Response<ResponseClass> response) {
    // The network call was a success and we got a response
    // implement the what needs to be done here
     }
    
     @Override
     public void onFailure(Call<ResponseClass> call, Throwable t) {
     // the network call was a failure
     // handle error
     }
     });
    
    //创建一个非常简单的REST适配器,它指向GitHub API端点。
    RestClient=reformation.create(GitHubClient.class);
    //调用API
    Call Call=client.login(参数为\u login\u Call);
    call.enqueue(新回调(){
    @凌驾
    公共void onResponse(调用、响应){
    //网络通话很成功,我们得到了回应
    //实施此处需要做的工作
    }
    @凌驾
    失败时公共无效(调用调用,可丢弃的t){
    //网络呼叫失败
    //处理错误
    }
    });
    

  • 分享您尝试过的代码…我添加了代码请推荐我?请发布服务器响应的代码我添加了服务器响应的代码要接受适合您的答案!:)一步一步地阅读本指南,您将能够非常轻松地实现您的代码现在我已经编辑了问题,我添加了响应。请建议我如何登录?转到并输入您的服务器响应代码。您将获得正确的POJO类,该类将是ServerResponse类@卡瓦切汉德拉
    public interface MyClient { 
    @FromUrlEncoded 
    @POST("your/login/end/point/")
    Call<RequestClass> login(@String("username") String username, other post parameters);
    }
    
    String API_BASE_URL = "https://your.base.url/";
    
    OkHttpClient.Builder httpClient = new OkHttpClient.Builder();
    
    Retrofit.Builder builder =  
    new Retrofit.Builder()
            .baseUrl(API_BASE_URL)
            .addConverterFactory(
                GsonConverterFactory.create()
            );
    
    Retrofit retrofit =  builder.client(httpClient.build()).build();
    
    RestClient client =  retrofit.create(MyClient.class); 
    
    // Create a very simple REST adapter which points the GitHub API endpoint.
    RestClient client =  retrofit.create(GitHubClient.class);
    
    // Call the API
    Call<ResponseClass> call =  client.login(parameter_of_login_call);
    
    call.enqueue(new Callback<ResponseClass>() {  
    @Override
    public void onResponse(Call<ResponseClass> call, Response<ResponseClass> response) {
    // The network call was a success and we got a response
    // implement the what needs to be done here
     }
    
     @Override
     public void onFailure(Call<ResponseClass> call, Throwable t) {
     // the network call was a failure
     // handle error
     }
     });