Не отображается ProgressBar в AsyncTask

247
15 марта 2017, 16:50

Похоже, что RecyclerView фризит поток AsyncTask

Код Activity:

import android.content.Intent; 
import android.graphics.Color; 
import android.net.Uri; 
import android.os.AsyncTask; 
import android.os.Looper; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.widget.DividerItemDecoration; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ImageView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
import android.widget.Toast; 
import com.crazy_lab.pumpyourbrain1.achivements.AchievementsActivity; 
import com.crazy_lab.pumpyourbrain1.db.Setting; 
import com.crazy_lab.pumpyourbrain1.db.User; 
import com.crazy_lab.pumpyourbrain1.db.service.SettingService; 
import com.crazy_lab.pumpyourbrain1.db.service.UserService; 
import com.r0adkll.slidr.Slidr; 
import java.util.ArrayList; 
import java.util.List; 
public class PersonalAccount extends AppCompatActivity { 
ImageView image_user; 
Toolbar toolbar; 
List<Account> accountList; 
OnItemClickListener.OnItemClickCallback onItemClickCallback; 
int reading; 
int memory; 
int attention; 
int literacy; 
int arithmetic; 
TextView num_sections; 
public static int currentItem = 0; 
String space = " "; 
int medal = R.drawable.medal; 
String LOADING = "load"; 
ProgressBar pb; 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_personal_account); 
accountList = new ArrayList<>(); 
pb = (ProgressBar)findViewById(R.id.progressBar_loader); 
image_user = (ImageView) findViewById(R.id.imageView5); 
setImage(); 
toolbar = (Toolbar) findViewById(R.id.account_toolbar); 
toolbar.setTitle(setName()); 
toolbar.setTitleTextColor(Color.WHITE); 
toolbar.setNavigationIcon(R.drawable.ic_home); 
setSupportActionBar(toolbar); 
if (getSupportActionBar() != null) { 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setDisplayShowHomeEnabled(true); 
} 
Slidr.attach(this); 
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
@Override 
public void run() { 
new LoadTask().execute(); 
Log.e(LOADING , "Runnable"); 
}},80); 
} 
public String setName() { 
SettingService setting = new SettingService(getBaseContext()); 
List<Setting> set = setting.getAll(); 
Setting obj_name = set.get(0); 
return obj_name.getName(); 
} 
public void setImage() { 
SettingService setting = new SettingService(getBaseContext()); 
List<Setting> set = setting.getAll(); 
Setting obj_photo = set.get(0); 
String user_photo = obj_photo.getPhoto(); 
if (user_photo != null && !user_photo.equals("")) { 
Uri image = Uri.parse(user_photo); 
image_user.setImageURI(image); 
} else { 
image_user.setImageResource(R.drawable.crazzylab2); 
} 
} 
public List<Account> setAccountList() { 
UserService user = new UserService(getBaseContext()); 
List<User> set = user.getAll(); 
for (int i = 1; i <= 10; i++) { 
int ma = set.get(i).getAch(); 
if (ma > 0 ) { 
arithmetic++; 
} 
} 
for (int i = 11; i <= 20; i++) { 
int l = set.get(i).getAch(); 
if (l > 0) { 
literacy++; 
} 
} 
for (int i = 21; i <= 25; i++) { 
int m = set.get(i).getAch(); 
if (m > 0) { 
memory++; 
} 
} 
for (int i = 26; i <= 30; i++) { 
int sr = set.get(i).getAch(); 
if (sr > 0) { 
reading++; 
} 
} 
for (int i = 31; i <= 40; i++) { 
int att = set.get(i).getAch(); 
if (att > 0) { 
attention++; 
} 
} 
if (reading > 0 ) { 
if(reading == 10){ 
space = ""; 
} 
accountList.add(new Account(getString(R.string.training_speed_reading), space + String.valueOf(reading),medal)); 
} 
if (memory > 0 ) { 
accountList.add(new Account(getString(R.string.training_memory), space + String.valueOf(memory),medal)); 
} 
if (attention > 0 ) {
if(attention == 10){ 
space = ""; 
} 
accountList.add(new Account(getString(R.string.training_attention), space + String.valueOf(attention),medal)); 
} 
if (literacy > 0) { 
if(literacy == 10){ 
space = ""; 
} 
accountList.add(new Account(getString(R.string.training_literacy), space + String.valueOf(literacy),medal)); 
} 
if (arithmetic > 0) { 
if(arithmetic == 10){ 
space = ""; 
} 
accountList.add(new Account(getString(R.string.training_mental_arithmetic), space + String.valueOf(arithmetic),medal)); 
} 
Log.e(LOADING , "list loaded"); 
return accountList; 
} 
public void sectionsCount() { 
if (accountList.size() > 0 ) { 
if (accountList.size() == 1) { 
num_sections.setText(" " + accountList.size() + " " + getString(R.string.account_section1)); 
} 
if (accountList.size() % 2 == 0) { 
num_sections.setText(" " + accountList.size() + " " + getString(R.string.accont_section2or4)); 
} 
if (accountList.size() > 4) { 
num_sections.setText(" " + accountList.size() + " " + getString(R.string.accont_sections)); 
} 
} 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
switch (item.getItemId()) { 
case android.R.id.home: 
// h.removeCallbacks(r); 
new LoadTask().cancel(true); 
onBackPressed(); 
Log.e(LOADING , "arrow back pressed"); 
return true; 
default: 
return super.onOptionsItemSelected(item); 
} 
} 
public void onBackPressed() { 
super.onBackPressed(); 
new LoadTask().cancel(true); 
Log.e(LOADING , "BackPressed"); 
} 
public OnItemClickListener.OnItemClickCallback setOnItemClickCallback(){ 
onItemClickCallback = new OnItemClickListener.OnItemClickCallback() { 
@Override 
public void onItemClicked(View view, int position) { 
String section = accountList.get(position).getSection(); 
if (section.equals(getString(R.string.training_attention))) { 
currentItem = 0; 
} else if (section.equals(getString(R.string.training_literacy))) { 
currentItem = 1; 
} else if (section.equals(getString(R.string.training_memory))) { 
currentItem = 2; 
} else if (section.equals(getString(R.string.training_mental_arithmetic))) { 
currentItem = 3; 
} else if (section.equals(getString(R.string.training_speed_reading))) { 
currentItem = 4; 
} 
Intent toAch = new Intent(PersonalAccount.this, AchievementsActivity.class); 
startActivity(toAch); 
} 
}; 
return onItemClickCallback; 
}public class LoadTask extends AsyncTask<Void,Void,Void>{ 
//private ProgressDialog pDialog; 
RecyclerView rv; 
LinearLayoutManager layoutManager; 
AccountAdapter adapter; 
@Override 
protected void onPreExecute() { 
pb.setVisibility(View.VISIBLE); 
pb.setIndeterminate(true); 
Toast.makeText(getApplicationContext(),"Start",Toast.LENGTH_SHORT).show(); 
super.onPreExecute(); 
/*pDialog = new ProgressDialog(PersonalAccount.this); 
pDialog.setTitle("Please wait"); 
pDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
pDialog.setMessage("Loading data..."); 
pDialog.setIndeterminate(true); 
pDialog.setCancelable(false); 
pDialog.setInverseBackgroundForced(true); 
pDialog.show();*/ 
} 
@Override 
protected Void doInBackground(Void... voids) { 
rv = (RecyclerView) findViewById(R.id.recycler_view); 
num_sections = (TextView) findViewById(R.id.textView_num_sections); 
layoutManager = new LinearLayoutManager(getApplicationContext()); 
adapter = new AccountAdapter(setAccountList(),setOnItemClickCallback()); 
return null; 
} 
@Override 
protected void onPostExecute(Void aVoid) { 
super.onPostExecute(aVoid); 
rv.setHasFixedSize(true); 
rv.setLayoutManager(layoutManager); 
DividerItemDecoration mDividerItemDecoration = new DividerItemDecoration(rv.getContext(), 
layoutManager.getOrientation()); 
rv.addItemDecoration(mDividerItemDecoration); 
rv.setAdapter(adapter); 
sectionsCount(); 
//pDialog.dismiss(); 
pb.setVisibility(View.INVISIBLE); 
Toast.makeText(getApplicationContext(),"Finish",Toast.LENGTH_SHORT).show(); 
} 
} 
}

Код xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/progressLayout" 
android:background="@color/grey_background"> 
<ProgressBar 
style="?android:attr/progressBarStyle" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/progressBar_loader" 
android:visibility = "invisible" 
android:layout_centerVertical="true" 
android:layout_centerHorizontal="true" /> 
<include 
layout="@layout/toolbar" 
android:id="@+id/account_toolbar" /> 
<ScrollView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/scrollView2" 
android:layout_below="@+id/account_toolbar" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true"> 
<RelativeLayout 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_marginTop="@dimen/account_listView_margin"> 
<TextView 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textAppearance="?android:attr/textAppearanceLarge" 
android:id="@+id/textView_num_sections" 
android:layout_marginTop="@dimen/account_text_marginTop" 
android:layout_alignParentLeft="true" 
android:layout_alignParentStart="true" /> 
<android.support.v7.widget.RecyclerView 
android:id="@+id/recycler_view" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_below="@+id/textView_num_sections" 
android:background="@color/colorWhite" 
android:layout_marginTop="@dimen/account_listView_margin" 
android:layout_marginRight="@dimen/account_listView_margin" 
android:layout_marginLeft="@dimen/account_listView_margin" /> 

<de.hdodenhof.circleimageview.CircleImageView 
android:layout_width="@dimen/account_image" 
android:layout_height="@dimen/account_image" 
android:id="@+id/imageView5" 
android:background="@drawable/circular_hired" 
android:layout_marginTop="9dp" 
android:layout_alignParentTop="true" 
android:layout_centerHorizontal="true" /> 
</RelativeLayout> 
</ScrollView> 
</RelativeLayout>
READ ALSO
Исключение в конструкторе c параметрами Java

Исключение в конструкторе c параметрами Java

Есть конструктор с параметрами, к примеру: конструктор(параметр1, параметр2); Хочу предотвратить получение в качестве аргумента к параметру2...

291
Зачем нужна коллекция Stack?

Зачем нужна коллекция Stack?

Зачем нужна коллекция Stack, она расширяет Vector, который и так уже медленный из-за синхронизацииА в чем прикладной смысл этого Stack?

187
Вечноработающее приложение

Вечноработающее приложение

Есть некое клиент-серверное десктопное приложение, отправлять запросы и получать их оно будет только тогда, когда запущено, а следственно,...

201