Android – the progressbar spinner for asynchronous tasks does not work
My problem is that when I click the button "click" to call my API, my progress bar (spinner) should be displayed when I call the API. On the contrary, my application freezes for less than a second, and then displays my load spinner for a short period of time after the call is completed (it just flashes)
This is my code
private ProgressBar spinner;
public View onCreateView(...)
{
spinner = (ProgressBar) view.findViewById(R.id.progressBar1);
spinner.setVisibility(View.GONE);
...
}
private class MyTask extends AsyncTask<String, Void, Void> {
String pageContent = "";
DataOutputStream wr;
@Override
protected void onPreExecute() {
spinner.setVisibility(View.VISIBLE);
}
@Override
public Void doInBackground(String... params) {
requestResult.setSuccess(false);
HttpURLConnection connection;
try {
String url = "myURL";
//I only call my Api here. I delete rest so this won't bother you
requestResult.setSuccess(true);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
JsonParser parser = new JsonParser();
//Same here i delete nonimportant
MyResponse = new Gson().fromJson(jsonContent, MyResponse.class);
done();
spinner.setVisibility(View.GONE);
}
}
I've tried various methods. They always freeze for one second, then the load spinner flashes and displays the contents of the API
Can you help me?
My XML file
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scroll_view_send"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/buttonSend"
android:visibility="gone"/>
</RelativeLayout>
</ScrollView>
resolvent:
Try using this work example to pass the spinner box to mytask, as follows:
private class MyTask extends AsyncTask<String, Void, Void> {
String pageContent = "";
DataOutputStream wr;
private final ProgressBar progress;
public MyTask(final ProgressBar progress) {
this.progress = progress;
}
@Override
protected void onPreExecute() {
progress.setVisibility(View.VISIBLE);
}
...
@Override
protected void onPostExecute(Void result) {
JsonParser parser = new JsonParser();
//Same here i delete nonimportant
MyResponse = new Gson().fromJson(jsonContent, MyResponse.class);
done();
progress.setVisibility(View.GONE);
}
}
Then call new MyTask (Progress).Execute ();
Edit: in your question, you mean that the phone is frozen when calling mytask. Please check this step to avoid freezing the UI in asynctask:
>Do not use the new mytask(). Get() to call mytask > and try to move to doinbackground. Myresponse = new gson(). Fromjason (jsoncontent, myresponse. Class); done(); It can be expensive
Hope to help!