Android 改装响应中的怪异角色
我的应用程序调用一个web服务,返回一个以字节为单位的文件。该文件可以是pdf或JPG。我正在使用改装。以下是我配置呼叫的方式:Android 改装响应中的怪异角色,android,utf-8,retrofit,Android,Utf 8,Retrofit,我的应用程序调用一个web服务,返回一个以字节为单位的文件。该文件可以是pdf或JPG。我正在使用改装。以下是我配置呼叫的方式: public static final InterfazGibMobHttp getRetrofitClientUtf(Context c){ OkHttpClient client = new OkHttpClient(); HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
public static final InterfazGibMobHttp getRetrofitClientUtf(Context c){
OkHttpClient client = new OkHttpClient();
HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
settings = c.getSharedPreferences(c.getString(R.string.sharedPreferencesName), 0);
client.interceptors().add(new Interceptor() {
@Override
public com.squareup.okhttp.Response intercept(Interceptor.Chain chain) throws IOException {
com.squareup.okhttp.Response respuesta2 = chain.proceed(chain.request());
String respuesta=respuesta2.body().string();//Weird characters here
//Some logging
}
com.squareup.okhttp.Response newResponse = respuesta2.newBuilder().body(ResponseBody.create(respuesta2.body().contentType(), respuesta.getBytes())).build();
return newResponse;
}
});
client.interceptors().add(logging);
String url=settings.getString("urlServlet", null);
Retrofit builder = new Retrofit.Builder()
.baseUrl(url)
.addConverterFactory(GsonConverterFactory.create())
.client(client)
.build();
final InterfazGibMobHttp interfaz = builder.create(MyInterface.class);
return interfaz;
}
当应用程序收到响应时,它应该获取字节,并用它们创建一个文件,代码如下:
Call<ResponseBody> peticion=RetrofitClient.getRetrofitClientUtf(ViewPagerActivity.this).obtenerFichero(settings.getString("imei", ""),settings.getString("idCliente", ""), object);
peticion.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {
if(response.isSuccess()){
ResponseBody body=response.body();
File dir = new File(Environment.getExternalStorageDirectory() + “/nameOfApp/“+variable+"/"+anocherVariable);
if (!dir.exists()) {
dir.mkdirs();
}
File file = new File(dir, objetoFichero.get("nombre").getAsString());
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
try {
fos=new FileOutputStream(file);
fos.write(body.bytes());
fos.flush();
fos.getFD().sync();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
anotherVariable+=1;
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
});
Call peticion=RefughtClient.GetRefughtClientUTF(viewPagePractivity.this).obtenerFichero(settings.getString(“imei”)、settings.getString(“idCliente”)、object);
enqueue(新的回调(){
@凌驾
公共响应(响应、改装){
if(response.issucess()){
ResponseBody body=response.body();
File dir=新文件(Environment.getExternalStorageDirectory()+“/nameOfApp/”+variable+“/”+anocherVariable);
如果(!dir.exists()){
dir.mkdirs();
}
File File=新文件(dir,objetoFichero.get(“nombre”).getAsString());
试一试{
createNewFile();
}捕获(IOE异常){
e、 printStackTrace();
}
试一试{
fos=新文件输出流(文件);
fos.write(body.bytes());
fos.flush();
fos.getFD().sync();
fos.close();
}catch(filenotfounde异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
另一个变量+=1;
}
@凌驾
失效时的公共无效(可丢弃的t){
t、 printStackTrace();
}
});
该文件已创建,但当我尝试打开该文件时,该文件未正确创建。该文件似乎已损坏。请检查我得到的响应,在字符串“respuesta”中,我接收到一些显示为“”的字符有黑色背景,所以可能是编码问题。我如何才能正确获取我的文件…?在哪里使用编码?服务器使用UTF-8发送它,在拦截器中,我看到响应是UTF-8…我的错误在哪里
多谢各位