Salve. Molto probabilmente si tratterà di una stupidità, come di solito faccio quando programmo.
La storia è questa:
Nell'Activity principale reperisco un file dal telefono e creo un'istanza della classe Gpx:
La classe Gpx si occupa di inizializzare una lista tramite un AsyncTask utilizzando il file passato come parametro:codice:mFileName = data.getStringExtra("GetFileName"); String mCurFilePath = data.getStringExtra("GetPath") + "/" + mFileName; File file = new File(mCurFilePath); gpx = new Gpx(file, MainActivity.this); //è una variabile d'istanza
codice:public class Gpx extends AbstractTrack { private File file; private static final String TAG_LOG = Gpx.class.getName(); public Gpx(File file, Context context) { super(context); this.file = file; Log.d(TAG_LOG, file.toString()); //prints correctly build(); } /** * Esegue la costruzione del tracciato, inizializzando i campi privati */ protected void build() { ParserAsyncTask parserAsyncTask = new ParserAsyncTask(file); parserAsyncTask.execute(); } /** * AsyncTask che effettua il parsing del file gpx */ private class ParserAsyncTask extends AsyncTask<Void,Void,Void> { private ProgressDialog mDialog; private File file; public ParserAsyncTask(File file) { this.file = file; } protected void onPreExecute() { mDialog = ProgressDialog.show(context, "", "Caricamento...", true); } protected void onPostExecute(Void unused) { if(mDialog != null) { if(mDialog.isShowing()) { mDialog.dismiss(); } } //calcolo la lunghezza del tracciato calculatesLength(); } protected Void doInBackground(Void... param) { try { //Si crea l’oggetto XmlPullParserFactory XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //Abilitiamo il supporto ai namespace factory.setNamespaceAware(true); //Si crea l'XmlPullParser dal factory XmlPullParser parser = factory.newPullParser(); //Si passa il file da parsare come input parser.setInput(new FileInputStream(file),null); //NULLPOINTEREXCEPTION //omesso il resto dell'algoritmo } } private void calculatesLength() { for(int i=0; i < coordinates.size() - 1; i++) { LatLng firstLatLng = coordinates.get(i); LatLng secondLatLng = coordinates.get(i+1); length += Utilities.getInstance().getDistance(firstLatLng,secondLatLng); } } }
Ottengo NullPointerException alla riga indicata. Il file però non mi sembra nullo, le varie stampe stampano bene!
codice:06-17 11:52:18.136 30669-31519/com.loris.stefano.easyroutes E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:299) at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) at java.util.concurrent.FutureTask.setException(FutureTask.java:124) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) Caused by: java.lang.NullPointerException: file == null at java.io.FileInputStream.<init>(FileInputStream.java:76) at com.loris.stefano.easyroutes.model.Gpx$ParserAsyncTask.doInBackground(Gpx.java:82) at com.loris.stefano.easyroutes.model.Gpx$ParserAsyncTask.doInBackground(Gpx.java:49) at android.os.AsyncTask$2.call(AsyncTask.java:287) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) at java.util.concurrent.FutureTask.run(FutureTask.java:137) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) at java.lang.Thread.run(Thread.java:856) 06-17 11:52:18.986 30669-30669/com.loris.stefano.easyroutes E/WindowManager﹕ Activity com.loris.stefano.easyroutes.main.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42672880 that was originally added here android.view.WindowLeaked: Activity com.loris.stefano.easyroutes.main.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@42672880 that was originally added here at android.view.ViewRootImpl.<init>(ViewRootImpl.java:378) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) at android.view.Window$LocalWindowManager.addView(Window.java:547) at android.app.Dialog.show(Dialog.java:285) at android.app.ProgressDialog.show(ProgressDialog.java:116) at android.app.ProgressDialog.show(ProgressDialog.java:99) at com.loris.stefano.easyroutes.model.Gpx$ParserAsyncTask.onPreExecute(Gpx.java:59) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586) at android.os.AsyncTask.execute(AsyncTask.java:534) at com.loris.stefano.easyroutes.model.Gpx.build(Gpx.java:43) at com.loris.stefano.easyroutes.model.AbstractTrack.<init>(AbstractTrack.java:35) at com.loris.stefano.easyroutes.model.Gpx.<init>(Gpx.java:32) at com.loris.stefano.easyroutes.main.MainActivity.onActivityResult(MainActivity.java:839) at android.app.Activity.dispatchActivityResult(Activity.java:5192) at android.app.ActivityThread.deliverResults(ActivityThread.java:3158) at android.app.ActivityThread.handleSendResult(ActivityThread.java:3205) at android.app.ActivityThread.access$1100(ActivityThread.java:138) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:213) at android.app.ActivityThread.main(ActivityThread.java:4787) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556) at dalvik.system.NativeStart.main(Native Method)

Rispondi quotando