ユーザーの画像をダウンロードするときにエラーが発生する場合があります。NetworkOnMainThread
エラーが発生します。 次のような行でクラッシュします。 byte[] imgBytes = body.bytes();
onResponse
の方法はRetroFit
です。私の理解は、このメソッドがメインスレッドにないことです。それとも、UIスレッドと違うのですか?RetrofitでNetworkOnMainエラーが発生し、画像をダウンロードする
ここに私のコードです。
private void syncPersonPhoto(final DBHelper db, final ArrayList<Person> syncPersons, final int current) {
final Person person = syncPersons.get(current);
Call<ResponseBody> photoSyncCall = RestClient.get(context).getPersonPhoto(person.getPersonCode(), person.getPersonTypeCode());
photoSyncCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
ResponseBody body = response.body();
try {
byte[] imgBytes = body.bytes(); <--- ERROR HERE
body.close();
String imgBase64 = Base64.encodeToString(imgBytes, Base64.NO_WRAP);
db.addPersonImage(person.getPersonCode(), person.getPersonType(), imgBase64);
} catch (IOException e) {
log.log(TAG, "Bytes array couldn't be populated: " + e);
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
}
});
}
誰でも問題を見ることができますか?
ありがとうございました。
問題がある場合は、新しいスレッドでその行を実行してみてください。 – Nabin
これは、RetroFit :: onResponseメソッドがメインスレッド上にあることを示しています!私は見られるように 'enqueue'メソッドを使用しました。別のスレッドで実行した場合、Androidには2種類のスレッドしかないので同じです。 – eoinzy
これらの2種類のスレッドは何と思いますか? – Nabin