J'apprends le développement d'applications mobiles Quand j'ai implémenté Async Task, ça ne fonctionnait pas du tout quand j'ai ajouté onPostExecute et onPreExecute en dehors de doInBackground ça fonctionnait mais ça s'arrêtait de fonctionner après un tandis que. En fait, j'essaie de sauvegarder les données de EditText en cliquant sur le bouton de sauvegarde et d'essayer de le récupérer en utilisant le bouton Charger et de l'afficher en mode Texte. Maintenant, j'ai également ajouté une barre de progression à cela. Il lance une exception de pointeur nul.Async Tâche fonctionnant parfois et ne fonctionnant pas la plupart du temps
public class loadSomeStuff extends AsyncTask<String, Integer, String>{
ProgressDialog dialog;
protected void onPreExecute(String f) {
dialog = new ProgressDialog(FileOperations.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMax(100);
dialog.show();
f="whatever";
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
FileInputStream fis=null;
String dataResult=null;
for(int i=0;i<20;i++){
publishProgress(5);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
dialog.dismiss();
try {
fis = openFileInput(FILENAME);
byte[] dataArray = new byte[fis.available()];
while(fis.read(dataArray) != -1){
dataResult= new String(dataArray);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
fis.close();
return dataResult;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return "no data to handle";
}
@Override
protected void onProgressUpdate(Integer... values) {
dialog.incrementProgressBy(values[0]);
}
@Override
protected void onPostExecute(String result) {
viewResults.setText(result);
}
}
}
Ceci est mon logcat:
08-28 00:34:42.718: W/EGL_emulation(1430): eglSurfaceAttrib not implemented
08-28 00:34:49.528: D/AndroidRuntime(1430): Shutting down VM
08-28 00:34:49.528: W/dalvikvm(1430): threadid=1: thread exiting with uncaught exception (group=0xada39ba8)
08-28 00:34:49.538: E/AndroidRuntime(1430): FATAL EXCEPTION: main
08-28 00:34:49.538: E/AndroidRuntime(1430): Process: com.tarragon.tmessenger, PID: 1430
08-28 00:34:49.538: E/AndroidRuntime(1430): java.lang.NullPointerException
08-28 00:34:49.538: E/AndroidRuntime(1430): at com.tarragon.tmessenger.FileOperations$loadSomeStuff.onProgressUpdate(FileOperations.java:154)
08-28 00:34:49.538: E/AndroidRuntime(1430): at com.tarragon.tmessenger.FileOperations$loadSomeStuff.onProgressUpdate(FileOperations.java:1)
08-28 00:34:49.538: E/AndroidRuntime(1430): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:648)
08-28 00:34:49.538: E/AndroidRuntime(1430): at android.os.Handler.dispatchMessage(Handler.java:102)
08-28 00:34:49.538: E/AndroidRuntime(1430): at android.os.Looper.loop(Looper.java:136)
08-28 00:34:49.538: E/AndroidRuntime(1430): at android.app.ActivityThread.main(ActivityThread.java:5017)
08-28 00:34:49.538: E/AndroidRuntime(1430): at java.lang.reflect.Method.invokeNative(Native Method)
08-28 00:34:49.538: E/AndroidRuntime(1430): at java.lang.reflect.Method.invoke(Method.java:515)
08-28 00:34:49.538: E/AndroidRuntime(1430): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
08-28 00:34:49.538: E/AndroidRuntime(1430): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
08-28 00:34:49.538: E/AndroidRuntime(1430): at dalvik.system.NativeStart.main(Native Method)
08-28 00:34:51.598: W/dalvikvm(1430): threadid=12: thread exiting with uncaught exception (group=0xada39ba8)
08-28 00:34:51.598: I/Process(1430): Sending signal. PID: 1430 SIG: 9
Assurez-vous obtenez des valeurs correctes dans votre méthode 'onProgressUpdate'. – GrIsHu
Assurez-vous simplement que votre FILENAME n'est pas nul. – Piyush
'Thread.sleep (100);' cela bloquera 'Thread principal' !!! –