私は、画像付きのリストビュー、ウェブビュー、毎日のアプリで使用する多くの一般的なビューを含むアプリをアンドロイドで開発しています。アプリは正常に動作しますが、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;
}
}