OutOfMemoryError и Html.fromHtml in textview

Рейтинг: 0Ответов: 6Опубликовано: 15.04.2015

Всем добрый день. Пишу приложение для сайта. Смысл простой. С APi сайта в формате JSON скачиваем все материалы. А потом из базы данных показываем пользователю. Но подкралась проблема откуда не ждал. При открытии материала с 1-10 картинками вроде бы всё нормально. Но бывают материалы, где изображений очень много. бывает более 50. И на этом этапе приложение закрывается из-за нехватки памяти устройства. Ниже код Активности в которой должно происходить отображение.

public class FullTextActivity extends ActionBarActivity implements  Html.ImageGetter {
TextView  tv;
WebView ww;
TextView content;
private final static String TAG = "TestImageGetter";

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

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

    tv = (TextView)findViewById(R.id.title);

    tv.setText(getIntent().getStringExtra("title"));


    Spanned spanned = Html.fromHtml(getIntent().getStringExtra("content"), this, null);
   tv = (TextView) findViewById(R.id.content);
    tv.setText(spanned);
}

@Override
public Drawable getDrawable(String source) {
    LevelListDrawable d = new LevelListDrawable();
    Drawable empty = getResources().getDrawable(R.drawable.ic_launcher);
    d.addLevel(0, 0, empty);
    d.setBounds(0, 0, empty.getIntrinsicWidth(), empty.getIntrinsicHeight());

    new LoadImage().execute(source, d);

    return d;
}

class LoadImage extends AsyncTask<Object, Void, Bitmap> {

    private LevelListDrawable mDrawable;

    @Override
    protected Bitmap doInBackground(Object... params) {
        String sourceT = (String) params[0];

        String source = sourceT.replace("../..", "http://mediananny.com");

        mDrawable = (LevelListDrawable) params[1];
        Log.d(TAG, "doInBackground " + source);
        try {
            InputStream is = new URL(source).openStream();
            return BitmapFactory.decodeStream(is);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        Log.d(TAG, "onPostExecute drawable " + mDrawable);
        Log.d(TAG, "onPostExecute bitmap " + bitmap);
        if (bitmap != null) {
            BitmapDrawable d = new BitmapDrawable(bitmap);
            mDrawable.addLevel(1, 1, d);
            mDrawable.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());
            mDrawable.setLevel(1);
            // i don't know yet a better way to refresh TextView
            // mTv.invalidate() doesn't work as expected
            CharSequence t = tv.getText();
            tv.setText(t);
        }
    }
}

}

Для понимания все глубины трагедии показываю, что именно надо отобразить в приложении http://mediananny.com/reportazhi/2309660/

а вот что я имею из API http://mediananny.com/api/category/?offset=0&category_id=83&debug=true

Ответы

Ответов пока нет.