In my app i have an activity(MainActivity.java) and a class(non-activity class – SubClass.java). The SubClass has a ProgressDialog. i will call the SubClass from the MainActivity.
My question is How do i use the ProgressDialog from the Non-Activity Class(SubClass.java) from the Activity Class (MainActivity.java)
I get Null Pointer Exception Error at setProgress() and package declaration.
I did the following things
1) In the MainActivity i create object for the SubClass with constructor.
SubClass pro = new SubClass(MainActivity.this);
pro.call_fun();
2) In the SubClass : the whole coding ;
package com.progresss; // Line No : 1 ; Shows Null Pointer Exception
public class SubClass {
Context context = null;
public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private NotificationManager notificationManager;
private Notification notification;
private int progress_val = 0;
private String fileURL = "http://xxxxx.com/folder/sampleproject.apk";
private String destination = null;
private ProgressDialog downloadProgressDialog;
public SubClass(MainActivity progress_DialiogActivity) {
this.context = progress_DialiogActivity;
}
public void call_fun(){
new DownloadFileAsync().execute(fileURL);
}
// Updated APK File Download Task.
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
((Activity) context).showDialog(DIALOG_DOWNLOAD_PROGRESS);
// Notification Coding
...........
notification.contentIntent = contentIntent;
// -------------------
notificationManager =(NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notification);
}
@Override
protected String doInBackground(String... aurl) {
try {
// .......
} catch (Exception e) {
Log.e("Error Report Download Manager", e.getMessage());
}
return null;
}
protected void onProgressUpdate(String... progress) {
progress_val = Integer.parseInt(progress[0]);
.......
downloadProgressDialog.setProgress(Integer.parseInt(progress[0])); // Line No : 100 ; Shows Null Pointer Exception
}
@Override
protected void onPostExecute(String unused) {
notificationManager.cancel(0);
// ((Activity) context).dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
((Activity) context).removeDialog(DIALOG_DOWNLOAD_PROGRESS);
Log.e("Download", "Stop");
// Notification Coding
notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
.........
notificationManager.notify(0, notification);
// Open The Install App Activity(Intent) Here.
........
}
} // Async Task Class End
//our progress bar settings
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
downloadProgressDialog = new ProgressDialog(context);
downloadProgressDialog.setMessage("Downloading file...");
downloadProgressDialog.setMax(100);
downloadProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
downloadProgressDialog.setCancelable(false);
downloadProgressDialog.show();
return downloadProgressDialog;
default:
return null;
}
}
}
This is LogCat Error Message:
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.progresss.SubClass$DownloadFileAsync.onProgressUpdate(SubClass.java:100)
at com.progresss.SubClass$DownloadFileAsync.onProgressUpdate(SubClass.java:1)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:432)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:521)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at dalvik.system.NativeStart.main(Native Method)
The Progress Dialog Code Works good in an activity class. i guess ProgressDialog may not be initialized correctly. Please help me.
onCreateDialogis not executed. Please move the code toonPreExecuteMethod .onCreateDialogis call back method and it will be called in activity only , in your subcalss its just a method.