2016-07-12 9 views
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(); 
} 

ご協力いただきありがとうございます。

+0

ログに何か間違っていますか?アプリがハングアップしたときに、アプリのlogcatを投稿できますか? – Raghavendra

+0

I/Choreographer:スキップされた51フレーム!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 I/Choreographer:67フレームをスキップしました!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 I/Choreographer:スキップ87フレーム!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 W/art:すべてのスレッドをサスペンドしました:7.252ms I/Choreographer:109フレームをスキップしました!アプリケーションがメインスレッドであまりにも多くの作業を行っている可能性があります。 –

+0

アプリケーションがクラッシュすることはなく、自動的にシャットダウンします。 –

答えて

0

それは私がページ変換アニメーションを使用していたためで、メインスレッドで多くの作業をしていたからです。私はアニメーションを削除し、今は正しく動作しています。

関連する問題