我正在尝试在Android中制作Json请求和响应,但我是新手,我需要如何制作此示例..
建立连接:
public class ServiceGeneratorCpf {
//URL base do endpoint. Deve sempre terminar com /
public static final String API_BASE_URL = "http://www.soawebservices.com.br/";
public static <S> S createService(Class<S> serviceClass) {
//Instancia do interceptador das requisições
HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor();
loggingInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder()
.readTimeout(15, TimeUnit.SECONDS);
httpClient.addInterceptor(loggingInterceptor);
//Instância do retrofit
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create(new Gson()))
.client(httpClient.build())
.build();
return retrofit.create(serviceClass);
}
型号:
public class RespostaServidorCpf {
private String result;
private Boolean valid;
private String Email;
private String Senha;
private String Documento;
private String Nome;
private String DataNascimento;
private String DataInscricao;
private String AnoObito;
private String MensagemObito;
private String CodigoSituacaoCadastral;
private String SituacaoRFB;
private Date DataConsultaRFB;
private String ProtocoloRFB;
private String DigitoVerificador;
private String Mensagem;
private Boolean Status;
public RespostaServidorCpf(){
}
public String getResult() {
return result;
}
public boolean isValid() {
return valid;
}
public void setValid(boolean valid) {
this.valid = valid;
}
public void setResult(String result) {
this.result = result;
}
public String getDocumento() {
return Documento;
}
public void setDocumento(String Documento) {
this.Documento = Documento;
}
public String getNome() {
return Nome;
}
public void setNome(String nome) {
Nome = nome;
}
public String getDataNascimento() {
return DataNascimento;
}
public void setDataNascimento(String dataNascimento) {
DataNascimento = dataNascimento;
}
public String getDataInscricao() {
return DataInscricao;
}
public void setDataInscricao(String dataInscricao) {
DataInscricao = dataInscricao;
}
public String getAnoObito() {
return AnoObito;
}
public void setAnoObito(String anoObito) {
AnoObito = anoObito;
}
public String getMensagemObito() {
return MensagemObito;
}
public void setMensagemObito(String mensagemObito) {
MensagemObito = mensagemObito;
}
public String getCodigoSituacaoCadastral() {
return CodigoSituacaoCadastral;
}
public void setCodigoSituacaoCadastral(String codigoSituacaoCadastral) {
CodigoSituacaoCadastral = codigoSituacaoCadastral;
}
public String getSituacaoRFB() {
return SituacaoRFB;
}
public void setSituacaoRFB(String situacaoRFB) {
SituacaoRFB = situacaoRFB;
}
public Date getDataConsultaRFB() {
return DataConsultaRFB;
}
public void setDataConsultaRFB(Date dataConsultaRFB) {
DataConsultaRFB = dataConsultaRFB;
}
public String getProtocoloRFB() {
return ProtocoloRFB;
}
public void setProtocoloRFB(String protocoloRFB) {
ProtocoloRFB = protocoloRFB;
}
public String getDigitoVerificador() {
return DigitoVerificador;
}
public void setDigitoVerificador(String digitoVerificador) {
DigitoVerificador = digitoVerificador;
}
public String getMensagem() {
return Mensagem;
}
public void setMensagem(String mensagem) {
Mensagem = mensagem;
}
public Boolean getStatus() {
return Status;
}
public void setStatus(Boolean status) {
Status = status;
}
public String getEmail() {
return Email;
}
public void setEmail(String email) {
Email = email;
}
public String getSenha() {
return Senha;
}
public void setSenha(String senha) {
Senha = senha;
}
界面:
public interface RetrofitService {
@Headers({
"Content-Type: application/json"
})
@FormUrlEncoded
@POST("restservices/producao/cdc/pessoafisicanfe.ashx")
Call<RespostaServidorCpf> mostrarConsultaCpf(@Field("Email") String Email,
@Field("Senha") String Senha,
@Field("Documento") String Documento,
@Field("DataNascimento") String DataNascimento);
}
我收到Json回复的地方:
public class ResultConsCpfActivity extends AppCompatActivity {
RespostaServidorCpf resposta = new RespostaServidorCpf();
private ProgressDialog progress;
private String Senha;
private String Email;
private TextView txtDocumento;
private TextView txtNome;
private TextView txtDataNascimento;
private TextView txtDataInscricao;
private TextView txtAnoObito;
private TextView txtMensagemObito;
private TextView txtCodigoSituacaoCadastral;
private TextView txtSituacaoRFB;
private TextView txtDataConsultaRFB;
private TextView txtProtocoloRFB;
private TextView txtDigitoVerificador;
private TextView txtMensagem;
private TextView txtStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result_cons_cpf);
Email = "pedrofarbo@gmail.com";
Senha = "efTE8zjwC";
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
String date = bundle.getString("date");
String cpf = bundle.getString("cpf");
txtDocumento = (TextView) findViewById(R.id.txtDocumento);
txtNome = (TextView) findViewById(R.id.txtNome);
txtDataNascimento = (TextView) findViewById(R.id.txtDataNascimento);
txtDataInscricao = (TextView) findViewById(R.id.txtDataInscricao);
txtAnoObito = (TextView) findViewById(R.id.txtAnoObito);
txtMensagemObito = (TextView) findViewById(R.id.txtMensagemObito);
txtCodigoSituacaoCadastral = (TextView) findViewById(R.id.txtCodigoSituacaoCadastral);
txtSituacaoRFB = (TextView) findViewById(R.id.txtSituacaoRFB);
txtDataConsultaRFB = (TextView) findViewById(R.id.txtDataConsultaRFB);
txtProtocoloRFB = (TextView) findViewById(R.id.txtProtocoloRFB);
txtDigitoVerificador = (TextView) findViewById(R.id.txtDigitoVerificador);
txtMensagem = (TextView) findViewById(R.id.txtMensagem);
txtStatus = (TextView) findViewById(R.id.txtStatus);
progress = new ProgressDialog(ResultConsCpfActivity.this);
progress.setTitle("Recebendo Consulta...");
progress.show();
//pega os valores dos edittextos
String email = Email;
String senha = Senha;
//chama o retrofit para fazer a requisição no webservice
retrofitConverter(email, senha, cpf, date);
}
public void setaValores(){
txtDocumento.setText(resposta.getDocumento());
txtNome.setText(resposta.getNome());
txtDataNascimento.setText(resposta.getDataNascimento());
txtDataInscricao.setText(resposta.getDataInscricao());
txtAnoObito.setText(resposta.getAnoObito());
txtMensagemObito.setText(resposta.getMensagemObito());
txtCodigoSituacaoCadastral.setText(resposta.getCodigoSituacaoCadastral());
txtSituacaoRFB.setText(resposta.getSituacaoRFB());
txtDataConsultaRFB.setText((CharSequence) resposta.getDataConsultaRFB());
txtProtocoloRFB.setText(resposta.getProtocoloRFB());
txtDigitoVerificador.setText(resposta.getDigitoVerificador());
txtMensagem.setText(resposta.getMensagem());
}
public void retrofitConverter(String Email, String Senha, String Documento, String DataNascimento) {
RetrofitService service = ServiceGeneratorCpf.createService(RetrofitService.class);
Call<RespostaServidorCpf> call = service.mostrarConsultaCpf(Email, Senha, Documento, DataNascimento);
call.enqueue(new Callback<RespostaServidorCpf>() {
@Override
public void onResponse(Call<RespostaServidorCpf> call, Response<RespostaServidorCpf> response) {
if (response.isSuccessful()) {
RespostaServidorCpf respostaServidorCpf = response.body();
//verifica aqui se o corpo da resposta não é nulo
if (respostaServidorCpf != null) {
if(respostaServidorCpf.isValid()) {
resposta.setDocumento(respostaServidorCpf.getDocumento());
resposta.setNome(respostaServidorCpf.getNome());
resposta.setDataNascimento(respostaServidorCpf.getDataNascimento());
resposta.setDataInscricao(respostaServidorCpf.getDataInscricao());
resposta.setAnoObito(respostaServidorCpf.getAnoObito());
resposta.setMensagemObito(respostaServidorCpf.getMensagemObito());
resposta.setCodigoSituacaoCadastral(respostaServidorCpf.getCodigoSituacaoCadastral());
resposta.setSituacaoRFB(respostaServidorCpf.getSituacaoRFB());
resposta.setDataConsultaRFB(respostaServidorCpf.getDataConsultaRFB());
resposta.setProtocoloRFB(respostaServidorCpf.getProtocoloRFB());
resposta.setDigitoVerificador(respostaServidorCpf.getDigitoVerificador());
resposta.setMensagem(respostaServidorCpf.getMensagem());
resposta.setValid(respostaServidorCpf.isValid());
progress.dismiss();
setaValores();
} else{
Toast.makeText(getApplicationContext(),"Insira unidade e valores válidos", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(),"Resposta nula do servidor", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getApplicationContext(),"Resposta não foi sucesso", Toast.LENGTH_SHORT).show();
// segura os erros de requisição
ResponseBody errorBody = response.errorBody();
}
progress.dismiss();
}
@Override
public void onFailure(Call<RespostaServidorCpf> call, Throwable t) {
Toast.makeText(getApplicationContext(),"Erro na chamada ao servidor", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
startActivity(intent);
progress.dismiss();
}
});
}
查看我正在尝试请求和回复的网络服务的Json:
Json url:http://soawebservices.com.br/restservices/producao/cdc/pessoafisicanfe.ashx
请在回答问题之前查看链接!
如何发送凭据:“电子邮件”“Senha”并收到Json回复?
有什么问题?
谢谢大家!
答案 0 :(得分:0)
Host: soawebservices.com.br POST /restservices/producao/cdc/pessoafisicanfe.ashx Content-Type: application/json { "Credenciais": { "Email": "Seu endereco de E-Mail", "Senha": "Sua Senha" }, "Documento": "999.999.999-99", "DataNascimento": "01/11/2016" }
所以需要注意的事项:
API_BASE_URL = "http://www.soawebservices.com.br/";
(您可以在其末尾添加restservices
...)@POST
"restservices/producao/cdc/pessoafisicanfe.ashx"
application/json
。你在@Headers
中设置了这个,所以这很好。 现在,邮件正文......
1)它不是FormUrlEncoded
。至少我不认为这是JSON请求的工作方式
2)Credenciais
是一个对象本身,请求的主体没有Email
,Senha
,Documento
和DataNascimento
的单独列表。
因此,您需要实现Credenciais
类。
public class Credencials {
private String Email, Senha;
public Credencials(String email, String senha) {
this.Email = email;
this.Senha = senha;
}
// getters, setters...
}
并在界面中使用
Call<RespostaServidorCpf> mostrarConsultaCpf(
@Field("Credencials") Credencials credencials,
@Field("Documento") String Documento,
@Field("DataNascimento") String DataNascimento);
另外,使用该课程
RetrofitService service = ServiceGeneratorCpf.createService(RetrofitService.class);
Credencials cred = new Credencials(Email, Senha);
Call<RespostaServidorCpf> call = service.mostrarConsultaCpf(cred, Documento, DataNascimento);
最后,崩溃if语句。
//verifica aqui se o corpo da resposta não é nulo
if (respostaServidorCpf != null && respostaServidorCpf.isValid()) {
resposta = respostaServidorCpf;
progress.dismiss();
setaValores();
}