Reputation: 527
Code:
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// fileReader();
new xyz().execute();
}// button
});// button end
private class xyz extends AsyncTask<Void, Void, Void> {
private final ProgressDialog dialog = new ProgressDialog(CCActivity3.this);
protected void onPreExecute() {
this.dialog.setCancelable(true);
this.dialog.setMessage("Please Wait...");
this.dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
this.dialog.setProgress(0);
this.dialog.setMax(100);
this.dialog.show();
}
// put your code which preload with processDialog
private boolean running = true;
@Override
protected Void doInBackground(Void... params) {
// while( running ) {
fileReader(); //i keep getting error here
//}
return null;
}
@Override
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
super.onPostExecute(unused);
//this.dialog.dismiss();
}
}
Stack Trace:
04-10 21:05:05.398: D/skia(30039): purging 270K from font cache [38 entries]
04-10 21:05:05.508: D/dalvikvm(30039): GC_EXPLICIT freed 1828K, 18% free 12468K/15107K, external 7017K/7937K, paused 106ms
04-10 21:06:36.318: D/skia(30039): purging 13K from font cache [2 entries]
04-10 21:06:36.418: D/dalvikvm(30039): GC_EXPLICIT freed 3271K, 39% free 9233K/15107K, external 7017K/7937K, paused 93ms
04-10 21:07:37.208: W/dalvikvm(30039): threadid=9: thread exiting with uncaught exception (group=0x40015568)
04-10 21:07:37.228: E/AndroidRuntime(30039): FATAL EXCEPTION: AsyncTask #1
04-10 21:07:37.228: E/AndroidRuntime(30039): java.lang.RuntimeException: An error occured while executing doInBackground()
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.lang.Thread.run(Thread.java:1019)
04-10 21:07:37.228: E/AndroidRuntime(30039): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.view.ViewRoot.checkThread(ViewRoot.java:2954)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.view.ViewRoot.invalidateChild(ViewRoot.java:644)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:670)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2533)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.view.View.invalidate(View.java:5288)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.widget.TextView.checkForRelayout(TextView.java:5663)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.widget.TextView.setText(TextView.java:2814)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.widget.TextView.setText(TextView.java:2682)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.widget.TextView.setText(TextView.java:2657)
04-10 21:07:37.228: E/AndroidRuntime(30039): at dev.android.CCActivity3.fileReader(CCActivity3.java:207)
04-10 21:07:37.228: E/AndroidRuntime(30039): at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:110)
04-10 21:07:37.228: E/AndroidRuntime(30039): at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:1)
04-10 21:07:37.228: E/AndroidRuntime(30039): at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-10 21:07:37.228: E/AndroidRuntime(30039): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-10 21:07:37.228: E/AndroidRuntime(30039): ... 4 more
04-10 21:07:37.258: I/Process(30039): Sending signal. PID: 30039 SIG: 9
04-10 21:14:03.819: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 109K, 64% free 487K/1347K, external 0K/0K, paused 4ms
04-10 21:14:03.988: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 4K, 64% free 491K/1347K, external 1K/513K, paused 14ms
04-10 21:14:04.778: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 10K, 61% free 534K/1347K, external 1521K/2013K, paused 12ms
04-10 21:14:04.968: D/dalvikvm(30687): GC_EXTERNAL_ALLOC freed 2K, 61% free 533K/1347K, external 4856K/6064K, paused 10ms
04-10 21:14:27.868: W/IInputConnectionWrapper(30687): getExtractedText on inactive InputConnection
04-10 21:14:27.888: W/IInputConnectionWrapper(30687): getCursorCapsMode on inactive InputConnection
04-10 21:14:27.888: W/IInputConnectionWrapper(30687): getExtractedText on inactive InputConnection
04-10 21:14:27.898: W/IInputConnectionWrapper(30687): performPrivateCommand on inactive InputConnection
04-10 21:14:38.208: D/szipinf(30687): Initializing inflate state
04-10 21:14:38.238: D/szipinf(30687): Initializing zlib to inflate
04-10 21:14:40.628: D/dalvikvm(30687): GC_FOR_MALLOC freed 412K, 24% free 3798K/4995K, external 7079K/7937K, paused 27ms
04-10 21:14:40.808: D/dalvikvm(30687): GC_CONCURRENT freed 405K, 18% free 5440K/6595K, external 7079K/7937K, paused 0ms+4ms
04-10 21:14:41.038: D/dalvikvm(30687): GC_CONCURRENT freed 7K, 10% free 7457K/8259K, external 7079K/7937K, paused 1ms+4ms
04-10 21:14:41.288: D/dalvikvm(30687): GC_CONCURRENT freed 351K, 11% free 9202K/10307K, external 7079K/7937K, paused 1ms+7ms
04-10 21:14:41.488: D/dalvikvm(30687): GC_FOR_MALLOC freed 6K, 7% free 10789K/11587K, external 7079K/7937K, paused 75ms
04-10 21:14:41.758: D/dalvikvm(30687): GC_CONCURRENT freed 522K, 10% free 12363K/13635K, external 7079K/7937K, paused 0ms+9ms
04-10 21:14:42.118: D/dalvikvm(30687): GC_CONCURRENT freed 8K, 6% free 14316K/15107K, external 7079K/7937K, paused 1ms+9ms
04-10 21:15:55.768: D/skia(30687): purging 340K from font cache [47 entries]
04-10 21:15:55.888: D/dalvikvm(30687): GC_EXPLICIT freed 1817K, 17% free 12542K/15107K, external 7079K/7937K, paused 107ms
04-10 21:16:42.368: D/skia(30687): purging 13K from font cache [2 entries]
04-10 21:16:42.478: D/dalvikvm(30687): GC_EXPLICIT freed 1038K, 24% free 11524K/15107K, external 7079K/7937K, paused 102ms
04-10 21:18:28.688: D/skia(30687): purging 13K from font cache [2 entries]
04-10 21:18:28.788: D/dalvikvm(30687): GC_EXPLICIT freed 6921K, 70% free 4646K/15107K, external 7079K/7937K, paused 91ms
04-10 21:18:33.758: W/dalvikvm(30687): threadid=9: thread exiting with uncaught exception (group=0x40015568)
04-10 21:18:33.768: E/AndroidRuntime(30687): FATAL EXCEPTION: AsyncTask #1
04-10 21:18:33.768: E/AndroidRuntime(30687): java.lang.RuntimeException: An error occured while executing doInBackground()
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.os.AsyncTask$3.done(AsyncTask.java:200)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:274)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.FutureTask.setException(FutureTask.java:125)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:308)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.lang.Thread.run(Thread.java:1019)
04-10 21:18:33.768: E/AndroidRuntime(30687): Caused by: android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.view.ViewRoot.checkThread(ViewRoot.java:2954)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.view.ViewRoot.invalidateChild(ViewRoot.java:644)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:670)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.view.ViewGroup.invalidateChild(ViewGroup.java:2533)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.view.View.invalidate(View.java:5288)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.widget.TextView.checkForRelayout(TextView.java:5663)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.widget.TextView.setText(TextView.java:2814)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.widget.TextView.setText(TextView.java:2682)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.widget.TextView.setText(TextView.java:2657)
04-10 21:18:33.768: E/AndroidRuntime(30687): at dev.android.CCActivity3.fileReader(CCActivity3.java:207)
04-10 21:18:33.768: E/AndroidRuntime(30687): at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:110)//file reader
04-10 21:18:33.768: E/AndroidRuntime(30687): at dev.android.CCActivity3$xyz.doInBackground(CCActivity3.java:1)
04-10 21:18:33.768: E/AndroidRuntime(30687): at android.os.AsyncTask$2.call(AsyncTask.java:185)
04-10 21:18:33.768: E/AndroidRuntime(30687): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
04-10 21:18:33.768: E/AndroidRuntime(30687): ... 4 more
My App has little lag, so I decided to put in a progress bar spinner while the app loads. My code shows errors after the progress bar spins for about 6 minutes. It throws an error on fileReader() and sometimes it just spins forever. The FileReader() is another class file that is the heart of the code. If you wish to see this class Click here Please Help Me. I appreciate.
Upvotes: 0
Views: 595
Reputation: 34765
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
});
use the above code in catch block of your doInBackground().
Upvotes: 0
Reputation: 13564
The problem is that you are trying to change the UI from the doInBackground
method. The root cause is probably your FileReader
class doing display.setText(fg);
. While you are in doInBackground
you cannot make changes to the Acticity's
UI. You will need to use AsyncTask's publishProgress and onProgressUpdate methods to accomplish that.
Upvotes: 2
Reputation: 2804
this.dialog.dismiss();
could be removed from the if statement, and just have the dialog automatically dismiss whenever onPostExecute
runs.
Edit: my code suggestion:
In the class that launches the AsyncTask:
ProgressDialog progressDialog = new ProgressDialog(getActivity());
progressDialog.setMessage("Logging in...");
LoginTask loginTask = new LoginTask((Polling) getActivity(), progressDialog);
loginTask.execute();
And the AsyncTask itself:
public class LoginTask extends AsyncTask<String, Void, Integer> {
private ProgressDialog progressDialog;
private Polling activity;
public LoginTask(Polling activity, ProgressDialog progressDialog)
{
this.activity = activity;
this.progressDialog = progressDialog;
}
@Override
protected void onPreExecute()
{
progressDialog.show();
}
protected Integer doInBackground(String... arg0) {
EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);
String email = userName.getText().toString();
String password = passwordEdit.getText().toString();
UserFunctions userFunction = new UserFunctions();
JSONObject json = userFunction.loginUser(email, password);
// check for login response
try {
if (json.getString(KEY_SUCCESS) != null) {
String res = json.getString(KEY_SUCCESS);
if(Integer.parseInt(res) == 1){
//whole bunch of extra code!
responseCode = 1;
// Close Login Screen
//finish();
}else{
responseCode = 0;
// Error in login
}
}
} catch (NullPointerException e) {
e.printStackTrace();
}
catch (JSONException e) {
e.printStackTrace();
}
return responseCode;
}
@Override
protected void onPostExecute(Integer responseCode)
{
EditText userName = (EditText)activity.findViewById(R.id.emailEditText);
EditText passwordEdit = (EditText)activity.findViewById(R.id.passEditText);
if (responseCode == 1) {
progressDialog.dismiss();
activity.loginReport(responseCode);
userName.setText("");
passwordEdit.setText("");
//shared prefences, store name
}
if (responseCode == 0) {
progressDialog.dismiss();
activity.loginReport(responseCode);
}
}
}
Just follow along with the progressDialog. It starts up in the main class that launches the task, is passed to the AsyncTask. Then when the AsyncTask constructs, the progressDialog is stored as a field in the AsyncTask. Then, in preExecute, we show() the progressDialog. Then, depending on the result of doInBackground, we send a 1 or 0 to onPostExecute. That one or zero tells onPostExecute what to do, which in my code dismisses the dialog either way, but then runs different methods in the main class. Hope this helps you compare a similar task to your own.
Upvotes: 0