0

私は、画像付きのリストビュー、ウェブビュー、毎日のアプリで使用する多くの一般的なビューを含むアプリをアンドロイドで開発しています。アプリは正常に動作しますが、3 回または 4 回実行すると、現在のアクティビティから突然クラッシュし、前のアクティビティに移動します。どうしてか分かりません。例外やエラーは発生しません。そして、そのアクティビティを 3 ~ 4 回再起動して、正常に動作し、再びクラッシュします。なぜそれが起こったのか誰か教えてください。メモリ管理かもしれません。

主にリストビューのアクティビティでクラッシュしました。ただし、リストビューでのデータ読み込みを使用してクラッシュした場合は、例外を与える必要があります。スレッド、イメージローダー、ビューホルダーも使用しました。しかし、問題が何であるかを見つけることができません!

ListView のアダプターは次のとおりです。

public class SavedAdapter extends BaseAdapter {

Context context;
JSONArray jsonArraySaved;
JSONObject jsonObjectSaved;
String user_id = "", distance = "";

public SavedAdapter(Context context, JSONArray jsonArraySaved) {
    this.context = context;
    this.jsonArraySaved = jsonArraySaved;       
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return jsonArraySaved.length();
}

@Override
public JSONObject getItem(int position) {
    // TODO Auto-generated method stub
    try {
        return jsonArraySaved.getJSONObject(position);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        return null;
    }
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

public static class ViewHolder {
    public GothicBoldTextView textViewFullName, textViewDistance;
    public GothicTextView textViewHeadLine, textViewTags;
    public ImageView imageViewPhoto;        
}

@Override
public View getView(final int position, View rawView, ViewGroup parent) {
    // TODO Auto-generated method stub      
    ViewHolder viewHolder;
    if (rawView == null) {
        rawView = LayoutInflater.from(context).inflate(
                R.layout.featured_events_list_item3, null);
        viewHolder = new ViewHolder();
        viewHolder.textViewFullName = (GothicBoldTextView) rawView
                .findViewById(R.id.textViewFullName);
        viewHolder.textViewHeadLine = (GothicTextView) rawView
                .findViewById(R.id.textViewHeadLine);
        viewHolder.textViewTags = (GothicTextView) rawView
                .findViewById(R.id.textViewTags);
        viewHolder.textViewDistance = (GothicBoldTextView) rawView
                .findViewById(R.id.textViewDistance);
        viewHolder.imageViewPhoto = (ImageView) rawView
                .findViewById(R.id.imageViewPhoto);
        rawView.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) rawView.getTag();
    }
    try {
        jsonObjectSaved = getItem(position);
        if (jsonObjectSaved.has("distance")) {
            distance = jsonObjectSaved.getString("distance");
            viewHolder.textViewDistance.setText(AccessClass
                    .getDistance(distance));
        }
        if (jsonObjectSaved.has("profile")) {
            jsonObjectSaved = jsonObjectSaved.getJSONObject("profile");
            if (jsonObjectSaved.has("firstname"))
                viewHolder.textViewFullName.setText(jsonObjectSaved
                        .getString("firstname"));
            if (jsonObjectSaved.has("lastname"))
                viewHolder.textViewFullName
                        .setText(viewHolder.textViewFullName.getText()
                                + " "
                                + jsonObjectSaved.getString("lastname"));
            if (jsonObjectSaved.has("headline"))
                viewHolder.textViewHeadLine.setText(jsonObjectSaved
                        .getString("headline"));
            if (jsonObjectSaved.has("tags")) {
                String tags = "";
                for (int i = 0; i < jsonObjectSaved.getJSONArray("tags")
                        .length(); i++) {
                    tags += jsonObjectSaved.getJSONArray("tags")
                            .getJSONObject(i).getString("name")
                            + ", ";
                }
                viewHolder.textViewTags.setText(tags.substring(0,
                        tags.length() - 2));
            }
            if (jsonObjectSaved.has("avatar_thumb")) {

                if (!jsonObjectSaved.getString("avatar_thumb").equals(
                        "/avatars/thumb/missing.png")) {
                    viewHolder.imageViewPhoto.setTag(jsonObjectSaved
                            .getString("avatar_thumb"));
                    SplashActivity.imageLoader.displayImage(context
                            .getResources().getString(R.string.domain)
                            + jsonObjectSaved.getString("avatar_thumb"),                                
                            viewHolder.imageViewPhoto);

                } else if (!jsonObjectSaved.isNull("picture_url")) {                            
                    viewHolder.imageViewPhoto.setTag(jsonObjectSaved
                            .getString("picture_url"));
                    SplashActivity.imageLoader.displayImage(
                            jsonObjectSaved.getString("picture_url"),                               
                            viewHolder.imageViewPhoto);
                }
            } else if (jsonObjectSaved.has("picture_url")
                    && !jsonObjectSaved.isNull("picture_url")) {                    
                viewHolder.imageViewPhoto.setTag(jsonObjectSaved
                        .getString("picture_url"));
                SplashActivity.imageLoader.displayImage(
                        jsonObjectSaved.getString("picture_url"),                           
                        viewHolder.imageViewPhoto);
            } else {                    
                viewHolder.imageViewPhoto.setTag("null");
                viewHolder.imageViewPhoto.setImageResource(R.drawable.photo2);
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    rawView.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {
                Intent intent;
                intent = new Intent(context, PublicProfileActivity.class);
                intent.putExtra("public_profile_id", ""
                        + getItem(position).getString("id"));
                context.startActivity(intent);
            } catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
        }
    });
    rawView.invalidate();
    return rawView;
}
}
4

1 に答える 1

0

私はあなたがそうするかもしれないと思います

adapter.imageLoader.clearCache();
adapter.imageLoader.stopThread();
listView.setAdapter(null);
于 2012-10-23T01:13:52.153 に答える