2016-09-05 7 views
2

Я использую ViewPager, чтобы показать фрагменты. Когда я красть его несколько раз он дает следующую ошибку:Как бороться с bad_alloc в android java

E/libc++abi: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc 
--------- beginning of crash 
A/libc: Fatal signal 6 (SIGABRT), code -6 in tid 6900 

Я показываю и кэширования изображения (using this), а также я использую TextView, чтобы показать текст на Fragment.
Я попытался получить помощь от других ссылок, но не смог добиться успеха.

+0

Вы работаете на реальном устройстве или эмуляторе? Вероятно, проблема связана с этим - http://stackoverflow.com/questions/15568475/android-emulator-error-stdbad-alloc –

+0

Я использую реальное устройство (Nexus 5) –

ответ

0

Я пытаюсь дублировать вашу проблему на моей стороне, я не получаю ошибку, но изображения не загружаются. Но файлы были кэшированы в моем внутреннем хранилище. Кстати, в вашем случае целесообразно использовать Picasso или Universal Image Loader, поскольку эти библиотеки будут обрабатывать загрузку, кеширование и даже ошибку. Это может быть не ваше прямое решение вашей проблемы, но на всякий случай, если вы ищете альтернативу, вы можете попробовать это решение.

Для простоты я использую Picasso. Я создал пример проекта только в том случае, если вам нужна ссылка. Вы должны добавить compile 'com.squareup.picasso:picasso:2.5.2' в свою зависимость от градиента;

1) Фрагмент

public class FragmentImage extends Fragment { 

private TextView imageName; 
private ImageView image; 

public static final String IMAGE_URL = "link"; 
public static final String POSITION = "position"; 

private String url = null; 
private int position = 0; 

public static FragmentImage newInstance(String link, int position) { 
    // Required empty public constructor 
    FragmentImage fragmentImage = new FragmentImage(); 
    Bundle bundle = new Bundle(); 
    bundle.putString(IMAGE_URL, link); 
    bundle.putInt(POSITION, position); 
    fragmentImage.setArguments(bundle); 
    return fragmentImage; 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(null != getArguments()){ 
     url = getArguments().getString(IMAGE_URL); 
     position = getArguments().getInt(POSITION); 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_fragment_image, container, false); 
} 

@Override 
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
    super.onViewCreated(view, savedInstanceState); 

    image = (ImageView)view.findViewById(R.id.image); 
    imageName = (TextView)view.findViewById(R.id.imageName); 

    imageName.setText("Position "+position); 
    Picasso.with(getActivity()) 
      .load(url) 
      .placeholder(R.mipmap.ic_launcher) 
      .error(R.mipmap.ic_launcher) 
      .into(image); 
} 
} 

2) FragmentAdapter

public class FragmentImagePager extends FragmentPagerAdapter { 

private String[] imageUrls = {"https://www.ricoh.com/r_dc/caplio/r7/img/sample_04.jpg", 
"http://i-cdn.phonearena.com/images/articles/47012-image/photo2.jpg", 
"http://www.flooringvillage.co.uk/ekmps/shops/flooringvillage/images/request-a-sample--547-p.jpg", 
"http://www.cameraegg.org/wp-content/uploads/2013/03/Canon-EOS-100D-Rebel-SL1-Sample-Image.jpg", 
"http://imgsv.imaging.nikon.com/lineup/lens/singlefocal/wide/af-s_35mmf_14g/img/sample/sample4_l.jpg"}; 

public FragmentImagePager(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int position) { 
    return FragmentImage.newInstance(imageUrls[position], position); 
} 

@Override 
public int getCount() { 
    return imageUrls.length; 
} 
} 

3) Активность

public class MainActivity extends AppCompatActivity{ 

private ViewPager fragmentList; 
private FragmentImagePager fragmentImagePager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    fragmentList = (ViewPager)findViewById(R.id.fragmentList); 
    fragmentImagePager = new FragmentImagePager(getSupportFragmentManager()); 
    fragmentList.setAdapter(fragmentImagePager); 
    fragmentList.setOffscreenPageLimit(fragmentImagePager.getCount()); 

} 
} 
Смежные вопросы