Приложение не работает в android 4.0 и выше

Я пытаюсь показать изображение и текст в текстовом редакторе, но он не работает в сандвичем с мороженым и Jellybean. Он работает отлично в версиях ниже.

Когда действие приостанавливается и возобновляется снова, оно отображает имена изображений вместо изображения в тексте редактирования вместе с текстом.

Пожалуйста, обратитесь к изображению и соответствующему коду

public class MainActivity extends Activity implements OnClickListener, OnItemClickListener { String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Emoticons"; HashMap<String, Integer> emoticons = new LinkedHashMap<String, Integer>(); ArrayList<String> arrayList = new ArrayList<String>(); Bitmap bitmap; EditText editText; ImageButton cat_one; ArrayList<String> name = new ArrayList<String>(); View view; CharSequence[] namesList = { "Email"}; Dialog dialog; GridView gridView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); if (Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { File sd = new File(path); if (!sd.exists()) sd.mkdirs(); } addComponents(); addListeners(); } private void fillArrayList() { Iterator<Entry<String, Integer>> iterator = emoticons.entrySet() .iterator(); Log.d("Iterator", iterator.toString()); while (iterator.hasNext()) { Entry<String, Integer> entry = iterator.next(); Log.d("Entry", entry.getKey()); arrayList.add(entry.getKey()); } } private void getCategory(String cat_name) { // TODO Auto-generated method stub if (name.size() > 0) name.clear(); if (emoticons.size() > 0) emoticons.clear(); if (arrayList.size() > 0) arrayList.clear(); Field names[] = R.drawable.class.getFields(); for (Field f : names) { if (f.getName().contains(cat_name)) { name.add(f.getName()); } } for (int i = 0; i < name.size(); i++) { int id = getResources().getIdentifier(name.get(i), "drawable", getPackageName()); Log.d("Drawable Folder", name.get(i).toString()); emoticons.put(name.get(i), id); } fillArrayList(); } private void addListeners() { // TODO Auto-generated method stub cat_one.setOnClickListener(this); gridView.setOnItemClickListener(this); } private void addComponents() { // TODO Auto-generated method stub editText = (EditText) findViewById(R.id.editText1); editText.requestFocus(); view = getLayoutInflater().inflate(R.layout.popup, null); gridView = (GridView) view.findViewById(R.id.gridLayout); dialog = new Dialog(this, R.style.DialogSlideAnim); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.getWindow().setGravity(Gravity.BOTTOM); Window window = dialog.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); dialog.setContentView(view); dialog.setCanceledOnTouchOutside(true); cat_one = (ImageButton) findViewById(R.id.category_one); } public Spannable getSmiledText(Context context, String text) { SpannableStringBuilder builder = new SpannableStringBuilder(text); int index; for (index = 0; index < builder.length(); index++) { for (Entry<String, Integer> entry : emoticons.entrySet()) { int length = entry.getKey().length(); if (index + length > builder.length()) continue; if (builder.subSequence(index, index + length).toString() .equals(entry.getKey())) { builder.setSpan(new ImageSpan(context, entry.getValue()), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index += length - 1; break; } } } return builder; } class ImageAdapter extends BaseAdapter { public int getCount() { return arrayList.size(); } public Object getItem(int position) { return arrayList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { convertView = LayoutInflater.from(MainActivity.this).inflate( R.layout.row, null); ImageView imageView = (ImageView) convertView .findViewById(R.id.imageView1); imageView.setBackgroundDrawable(getResources().getDrawable( emoticons.get(arrayList.get(position)))); Log.d(getLocalClassName(), String.valueOf(emoticons.get(arrayList.get(position)))); return convertView; } } @Override public void onClick(View v) { // TODO Auto-generated method stub if (v == cat_one) { getCategory("good"); gridView.setAdapter(new ImageAdapter()); } } @Override public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub String value = gridView.getAdapter().getItem(position).toString(); Spannable spannable = getSmiledText(MainActivity.this, value); SpannableStringBuilder ssb = new SpannableStringBuilder( editText.getText()).append(spannable).append(" "); editText.setText(ssb); editText.setSelection(editText.getText().length()); editText.setCursorVisible(true); } } 

Введите описание изображения здесь

Введите описание изображения здесь

Я думаю, нам понадобится немного отслеживания, чтобы лучше понять, что происходит не так. Но поскольку вы не можете загрузить изображения, мне было интересно, возможно ли, что вы потеряли доступ к внешнему хранилищу

Я предлагаю использовать Asynctask при загрузке изображений, что решит вашу проблему, у меня была такая же проблема.

http://developer.android.com/reference/android/os/AsyncTask.html

http://android-developers.blogspot.mx/2010/07/multithreading-for-performance.html

Использование AsyncTask для загрузки изображений в ListView