1
まあ、私はRealmを使ってデータを保存しています。しかし、データを保存するためにフラグメントの1つで使用すると、他のフラグメントがハングアップしてからアプリがシャットダウンします。私は改造を使用してデータを取得しています。私はすべてのクラスを投稿するのではなく、関連するメソッドだけを投稿します。realmとviewPagerを使用するとアプリケーションがハングアップする
1)インターネット接続が可能かどうかを確認します。私レルムからデータを取得し、リサイクルビューに配置されていない場合:
public void internet() {
cd = new ConnectionDetector(getActivity());
// Check if Internet present
isInternetPresent = cd.isConnectingToInternet();
if (isInternetPresent == false) {
Toast.makeText(getActivity(), "Internet Not Present", Toast.LENGTH_LONG).show();
realm = Realm.getDefaultInstance();
recyclerView.setAdapter(new AdapterClass(this, realm.where(AndroidVersion.class).findAllAsync()));
} else {
realm = Realm.getDefaultInstance();
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmResults<AndroidVersion> realmList = realm.where(AndroidVersion.class).findAll();
realmList.deleteAllFromRealm();
}
});
loadJSON();
}
}
2)接続が利用できる場合、私はloadJSONメソッドを呼び出して、データを取得リサイクラービューでそれを設定しても、領域に保存します。
public void loadJSON() {
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("http://54.187.18.119/lived2d/")
.addConverterFactory(GsonConverterFactory.create())
.build();
RequestInterface request = retrofit.create(RequestInterface.class);
Call<JSONResponse> call = request.getJSON();
call.enqueue(new Callback<JSONResponse>() {
@Override
public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) {
JSONResponse jsonResponse = response.body();
data = new ArrayList<>(Arrays.asList(jsonResponse.getExplore()));
adapter = new RecyclerAdapter(data);
recyclerView.setAdapter(adapter);
for (int i = 0; i < 20; i++) {
realm = Realm.getDefaultInstance();
final int finalI = i;
realm.executeTransactionAsync(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
AndroidVersion androidVersion = new AndroidVersion();
androidVersion.setName(data.get(finalI).getName());
androidVersion.setLname(data.get(finalI).getLname());
androidVersion.setTitle(data.get(finalI).getTitle());
androidVersion.setLocation(data.get(finalI).getLocation());
androidVersion.setTotal_comment(data.get(finalI).getTotal_comment());
androidVersion.setTotal_like(data.get(finalI).getTotal_like());
androidVersion.setDate(data.get(finalI).getDate());
androidVersion.setId(data.get(finalI).getId());
androidVersion.setUser_id(data.get(finalI).getUser_id());
realm.copyToRealm(androidVersion);
RealmResults<AndroidVersion> results = realm.where(AndroidVersion.class).findAll();
Log.d("ALL ANSWER", String.valueOf(results));
}
});
}
}
@Override
public void onFailure(Call<JSONResponse> call, Throwable t) {
//Log.d("Error", t.getMessage());
if (t.getMessage().equals("timeout")) {
new AlertDialog.Builder(getContext())
.setIcon(R.mipmap.ic_launche)
.setTitle("Network Error")
.setMessage("Connection is weak or not available. Please try again after some time.")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
})
.setNegativeButton("Cancel", null)
.show();
}
}
});
}
RecyclerAdapterクラス:
public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.RecyclerViewHolder> {
private ArrayList<AndroidVersion> android;
public static final String KEY_USERID = "userid";
public static final String KEY_EXPLOREID = "exploreid";
public RecyclerAdapter(ArrayList<AndroidVersion> android) {
this.android = android;
if (ExploreFragment.srl.isRefreshing()) {
ExploreFragment.srl.setRefreshing(false);
}
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content_explore_fragment, parent, false);
return new RecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(RecyclerViewHolder holder, int position) {
Context context = holder.imageView.getContext();
String st = android.get(position).getImage();
String image = st.replace("\\", "");
int length = android.get(position).getTitle().length();
if (length >= 60) {
String title = android.get(position).getTitle().substring(0, 60) + "...";
holder.tv1.setText(title);
} else {
holder.tv1.setText(android.get(position).getTitle());
}
holder.time.setText(android.get(position).getDate());
holder.totallikes.setText(android.get(position).getTotal_like());
holder.location.setText(android.get(position).getLocation());
holder.name.setText(android.get(position).getName());
holder.comment.setText(android.get(position).getTotal_comment());
holder.lname.setText(android.get(position).getLname());
if (image.equals("")) {
Picasso.with(context).load(R.drawable.profilepi).into(holder.imageView);
} else {
Picasso.with(context).load("http://ec2-54-187-18-119.us-west-2.compute.amazonaws.com/lived2d/" + image).resize(100, 100).centerCrop().into(holder.imageView);
}
}
@Override
public int getItemCount() {
return android.size();
}
AdapterClassクラス:
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.RecyclerViewHolder> {
private RealmResults<AndroidVersion> arrayLists;
private Realm realm;
public AdapterClass(ExploreFragment second, RealmResults<AndroidVersion> allAsync) {
this.arrayLists = allAsync;
}
public AdapterClass(ArrayList<AndroidVersion> data) {
}
@Override
public RecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.content_explore_fragment, parent, false);
return new RecyclerViewHolder(view);
}
@Override
public void onBindViewHolder(final RecyclerViewHolder holder, final int position) {
realm = Realm.getDefaultInstance();
AndroidVersion user = arrayLists.get(position);
holder.name.setText(user.getName());
holder.lname.setText(user.getLname());
holder.location.setText(user.getLocation());
holder.tv1.setText(user.getTitle());
holder.time.setText(user.getDate());
holder.totallikes.setText(user.getTotal_like());
holder.lname.setText(user.getLname());
holder.comment.setText(user.getTotal_comment());
}
@Override
public int getItemCount() {
return arrayLists.size();
}
ご協力いただきありがとうございます。
ログに何か間違っていますか?アプリがハングアップしたときに、アプリのlogcatを投稿できますか? – Raghavendra
I/Choreographer:スキップされた51フレーム!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 I/Choreographer:67フレームをスキップしました!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 I/Choreographer:スキップ87フレーム!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 W/art:すべてのスレッドをサスペンドしました:7.252ms I/Choreographer:109フレームをスキップしました!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 –
アプリケーションがクラッシュすることはなく、自動的にシャットダウンします。 –