Я использую Retrofit2 Multipart, и это мой код для Android:
private void uploadToServer(String filePath) {
try {
Retrofit retrofit = NetworkClient.getRetrofitClient(this);
PessoaService getAtualizaPessoaPasso2 = retrofit.create(PessoaService.class);
//Create a file object using file path
File file = new File(filePath);
// Create a request body with file and image media type
RequestBody fileReqBody = RequestBody.create(MediaType.parse("image/*"), file);
// Create MultipartBody.Part using file request-body,file name and part name
MultipartBody.Part part = MultipartBody.Part.createFormData("upload", file.getName(), fileReqBody);
/*Transformamos getEmpresa e getEmpresaEmpregadora em String para comparação*/
String empresaIdString = String.valueOf(pessoa.getEmpresa().getEmpresaId());
String empresaIdEmpregadoraString = String.valueOf(pessoa.getEmpresaEmpregadora().getEmpresaId());
/*Para este caso, comparamos se o id da empresaIdEmpregadora é igual o da empresaId.
* Caso seja, está errado e devemos pegar o id da TAG EMPRESA, pois são coisas diferentes.
* A empresaEmpregadora são empresas registradas no banco, quando a outra é a empresa
* própria (PJ) do usuário ZappCard
* */
Call call;
if (empresaIdEmpregadoraString == empresaIdString) {
// Verificamos se a empresa é igual a empresaEmpregadora, se sim enviamos a TAG da empresaEmpregadora.
// Empresa e EmpresaEmpregadora são empresas diferentes.
call = getAtualizaPessoaPasso2.getAtualizaPessoaPasso2(pessoa.getIdentificador(), pessoa.getCelular(), empresaTag, part, pessoa.getProfissao());
} else if (!empresaIdEmpregadoraString.equals("")) {
// Enviamos a empresa empregadora do usuário caso exista uma
call = getAtualizaPessoaPasso2.getAtualizaPessoaPasso2(pessoa.getIdentificador(), pessoa.getCelular(), String.valueOf(pessoa.getEmpresaEmpregadora().getEmpresaId()), part, pessoa.getProfissao());
} else {
// Caso não exista nenhum empresaId, enviamos -10, o que significa que o usuário não tem uma empresaEmpregadora
call = getAtualizaPessoaPasso2.getAtualizaPessoaPasso2(pessoa.getIdentificador(), pessoa.getCelular(), "-10", part, pessoa.getProfissao());
}
call.enqueue(new Callback<Boolean>() {
@Override
public void onResponse(Call<Boolean> call, Response<Boolean> response) {
if (response.equals(true)) {
Toast.makeText(DadosPessoaisActivity.this, "Sucesso!", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(DadosPessoaisActivity.this, "Erro: " + response.message(), Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<Boolean> call, Throwable t) {
Toast.makeText(DadosPessoaisActivity.this, "Erro: " + t, Toast.LENGTH_SHORT).show();
}
});
} catch (Exception er) {
Log.d("ErroChamadaAPI", "uploadToServer: " + er);
Toast.makeText(this, "Um erro inesperado ocorreu! Tente novamente mais tarde. ", Toast.LENGTH_LONG).show();
}
}
Этот ответ:
Ответ {protocol = http / 1.1, code = 400, message= Плохой запрос, url = myapiurlhere}
У меня есть это JSONException:
org.json.JSONException: Значение Строка ввода была в неправильном формате. типа java.lang.String невозможно преобразовать в JSONObject