Ich benutze [Jobqueue] Bibliothek mit Sync-Anfrage mit Volley. Alles ist in Ordnung, aber nach langer Zeit oder viele Anfragen nach einer unbestimmten Zeit durchgeführt wird, erhalte ich diese Fehlermeldung:VolleyError: java.lang.IllegalArgumentException: timeout <0
Caused by: com.android.volley.VolleyError: java.lang.IllegalArgumentException: timeout < 0
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:141)
Caused by: java.lang.IllegalArgumentException: timeout < 0
at java.net.Socket.setSoTimeout(Socket.java:521)
at com.android.okhttp.internal.http.HttpTransport.discardStream(HttpTransport.java:193)
at com.android.okhttp.internal.http.HttpTransport.makeReusable(HttpTransport.java:170)
at com.android.okhttp.internal.http.HttpEngine.release(HttpEngine.java:445)
at com.android.okhttp.internal.http.AbstractHttpInputStream.endOfInput(AbstractHttpInputStream.java:86)
at com.android.okhttp.internal.http.HttpTransport$FixedLengthInputStream.read(HttpTransport.java:394)
at java.io.InputStream.read(InputStream.java:162)
at com.android.volley.toolbox.BasicNetwork.entityToBytes(BasicNetwork.java:238)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:123)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:112)
Dieser Fehler ist sehr seltsam, denn wenn ich diese Fehlermeldung erhalten, Anfragen werden nicht mehr funktioniert . Ich habe eine Menge Dinge probiert, wie zum Beispiel eine RequestQueue pro Job, anstatt eine App-Instanz RequestQueue zu haben, alle Jobs abzubrechen und Jobs und Anfragen in der RequestQueue zurückzusetzen.
Dies ist ein Beispiel dafür, wie ich bin eine Synchronisationsanforderung mit Volley:
public class FetchBlacklistJob extends Job {
public static final String TAG = FetchBlacklistJob.class.getCanonicalName();
public FetchBlacklistJob(String groupId) {
super(new Params(Constants.JOB_PRIORITY.HIGH.getValue())
.addTags(TAG)
.setGroupId(groupId)
.singleInstanceBy(TAG)
.requireNetwork());
}
@Override
public void onAdded() {
}
@Override
public void onRun() throws Throwable {
RequestFuture<Blacklist> syncCallback = RequestFuture.newFuture();
GetBlacklistRequest request = new GetBlacklistRequest(currentBlacklist,
syncCallback, syncCallback);
syncCallback.setRequest(VolleyManager.getInstance().addRequest(request));
Blacklist response = syncCallback.get(VolleyManager.TIMEOUT, TimeUnit.MILLISECONDS);
if (response == null || response.getBlacklist() == null) {
Log.d(TAG, "response null, skipping...");
return;
}
DBUtils.saveBlacklist(response);
}
@Override
protected void onCancel(int cancelReason, @Nullable Throwable throwable) {
}
I Kommentar vergessen zu, dass ich ein Timeout für jede Anforderung von 15 Sekunden und max Anzahl der Wiederholungen habe in Volley 0
Irgendeine Idee?
Wenn der Speicher dient, Retrofit ruft auch die Rückrufe onSuccess auf Hauptthread – Pnemonic
Ja, du hast recht. Ich habe vergessen, meine Nachforschungen über Cache zu machen. Ja, es ist eine Vermutung, aber wenn Sie wissen, wie Sie dieses Problem beheben können, antworten Sie bitte. –
Haben Sie Neuigkeiten zu Ihrem ursprünglichen Problem? – anthony