Sto utilizzando l'SDK Android parse.com
per gestire alcune immagini nella mia app. cancel()
è l'unico modo per interrompere una transazione con il server parse.com
?ParseFile.cancel() non funziona: il file continua a essere scaricato
Esempio minimo:
final ParseFile file = ... ;
file.getDataInBackground(new GetDataCallback() {
//called when loading is done
@Override
public void done(byte[] bytes, ParseException e) {
Log.e(TAG, String.valueOf(bytes == null));
}
}, new ProgressCallback() {
//called to notify progress
@Override
public void done(Integer integer) {
Log.e(TAG, String.valueOf(integer));
if (integer > 50) {
file.cancel();
}
}
});
mi aspetterei che il carico si ferma dopo il 50% è raggiunto, ma non è così. Il mio log in questa situazione sarebbe:
1
2
3
....
49
50
51
....
98
99
100
true
L'unica differenza dai tempi si chiamano cancel()
e volte non lo fai, è che se è stata annullata il risultato byte[]
è nullo. Ma questo è davvero secondario, il punto qui è che file
continua a consumare larghezza di banda e, inoltre, si sovrappone a download futuri, rallentando le cose.
C'è un modo per veramente stop ParseFile caricamento? Vedi qualche soluzione, come fermare il suo thread? Forse qualcosa che usa la struttura dei bulloni sottostante? Usando il mio compito asincrono?
Esempio: il metodo continueWhile()
potrebbe essere utile, ma non riesco a capire come usarlo.
Mi piacerebbe conoscere il motivo del downvote, forse il titolo comune? Questo è davvero quello che sto vivendo: ParseFile.cancel() non funziona. E dovrebbe, secondo il funzionario docs.
I commenti suggeriscono che dovrei semplicemente chiamare break
. Anche se non penso che funzionerebbe, potrei chiarire che il codice che ho postato era solo un esempio di lavoro minimo e conciso che forniva sia il contesto che il problema. Non voglio la transazione cancel()
dall'interno del callback di avanzamento; Voglio chiamare parseFile.cancel()
da tutte le parti. Inserisco il callback di avanzamento per mostrare che, mentre dovrebbe fermarsi, non lo è.
Edit Questo è quello che sto cercando di fare. Ho provato diversi modi, ma questo è tutto.
ParseFile currentFile;
public void setFile(ParseFile file) {
if (currentFile != null) {
currentFile.cancel();
}
currentFile = file;
currentFile.getDataInBackground(new GetDataCallback() {
...
}, new ProgressCallback() {
... // logs
});
}
Con tale codice e dire, due grandi immagini da scaricare, le cose vanno come:
//calling setFile(file1)
1
2
3
...
20
21
22
//calling setFile(file2), thus also calling file1.cancel()
1
2
23 //file1 going on!
3
24
4
25
... //things get slower and this screws up progress bars and such.
Hai provato a utilizzare l'interruzione invece di file.cancel() ;? – Want2bExpert
@ Want2bExpert è questo il motivo del downvote? Non ho provato perché non è questo il punto. Ho bisogno (e dovrei essere in grado di, secondo il 'cancel()' [documentazione] (https://parse.com/docs/android/api/com/parse/ParseFile.html#cancel())) per cancellare la transazione chiamandola sull'istanza del file, 'parseFile.cancel()', non solo dall'interno del callback (che non ha senso). Il codice nella mia domanda era un esempio minimale che mostrava il problema. – natario
Non ho votato per nessuna risposta o commento. – Want2bExpert