2016-08-30 5 views
0

私はをFacebookの投稿番号のListViewアダプターのgetView()に投稿しています。ここに私のコードは、アプリがアクティブなスレッドのcrasheによる最大数を取得GraphRequest増加数コールとしてFacebook GraphRequestクラッシュアプ​​リの複数コール

public class FeedListAdapter extends BaseAdapter { 

    . 
    . 
    . 

    @Override 
    public int getCount() { 
     return feedItems.size(); 
    } 

    @Override 
    public Object getItem(int location) { 
     return feedItems.get(location); 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     . 
     . 
     . 

     requestComments(feedItems.get(position).getObjectId(), viewHolder.tvPostCommentCount); 

    } 




    private void requestComments(String objectId, final TextView textViewCommentCount) { 

     Bundle parameters = new Bundle(); 
     parameters.putString("filter", "toplevel"); 
     parameters.putString("summary", "true"); 

     new GraphRequest(
       AccessToken.getCurrentAccessToken(), 
       "/"+objectId+"/comments?limit=3", 
       parameters, 
       HttpMethod.GET, 
       new GraphRequest.Callback() { 
        public void onCompleted(GraphResponse response) { 
         LOGMSG.SHOW(TAG+"requestComments() -> onCompleted()"); 

         try { 
          JSONObject responseJsonObject = response.getJSONObject(); 
          LOGMSG.SHOW(TAG+"requestComments() -> responseJsonObject:"+responseJsonObject); 
          JSONObject summaryJsonObject = responseJsonObject.getJSONObject("summary"); 
          LOGMSG.SHOW(TAG+"requestComments() -> summaryJsonObject:"+summaryJsonObject); 
          textViewCommentCount.setText(NumberUtils.kFormatter(summaryJsonObject.getLong("total_count"))); 

         }catch (Exception e) { 
          e.printStackTrace(); 
         } 

        } 
       } 
     ).executeAsync(); 
    } 


} 

です。ここで

はログイン

java.util.concurrent.RejectedExecutionException: Task [email protected] rejected from [email protected][Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 61] 
     at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011) 
     at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793) 
     at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339) 
     at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:594) 
     at com.facebook.GraphRequest.executeBatchAsync(GraphRequest.java:1225) 
     at com.facebook.GraphRequest.executeBatchAsync(GraphRequest.java:1204) 
     at com.facebook.GraphRequest.executeBatchAsync(GraphRequest.java:1187) 
     at com.facebook.GraphRequest.executeAsync(GraphRequest.java:998) 
     at com.ifahja.adapter.FeedListAdapter.requestLikes(FeedListAdapter.java:345) 
     at com.ifahja..adapter.FeedListAdapter.getView(FeedListAdapter.java:227) 
     at android.widget.HeaderViewListAdapter.getView(HeaderViewListAdapter.java:220) 
     at android.widget.AbsListView.obtainView(AbsListView.java:2347) 
     at android.widget.ListView.measureHeightOfChildren(ListView.java:1270) 
     at android.widget.ListView.onMeasure(ListView.java:1182) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436) 
     at android.widget.LinearLayout.measureVertical(LinearLayout.java:722) 
     at android.widget.LinearLayout.onMeasure(LinearLayout.java:613) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5537) 
     at android.widget.FrameLayout.onMeasure(FrameLayout.java:436) 
     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615) 
     at android.view.View.measure(View.java:17565) 
     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2045) 
     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1196) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1409) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1084) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5990) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:580) 
    at android.view.Choreographe 

は今、私の質問が言った問題を回避するために、並列スレッドの実行を許可するようにGraphRequstを呼び出す方法です。

ご返信いただければ幸いです。

答えて

0

私はあなたが間違ったway.Iを実装していると思うそれは完全に動作する私のケースで動作しますコードplzのチェックを提供します。ヨーヨーは、この項目はlistView.Iでそれらを使用し得るとき

FacebookCallback<LoginResult> mCallBack=new FacebookCallback<LoginResult>() { 
    @Override 
    public void onSuccess(LoginResult loginResult) { 


     // Facebook Email address 
     GraphRequest request = GraphRequest.newMeRequest(
       loginResult.getAccessToken(), 
       new GraphRequest.GraphJSONObjectCallback() { 

        public void onCompleted(
          JSONObject object, 
          GraphResponse response) { 
         Log.v("LoginActivity Response ", response.toString()); 

         try { 


          Name = object.getString("name"); 
          Email = object.getString("email"); 
          Gender=object.getString("gender"); 
          BD=object.getString("link"); 
       } 
        catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 


     Bundle parameters = new Bundle(); 
     parameters.putString("fields", "id,name,link,email"); 
     request.setParameters(parameters); 
     request.executeAsync(); 




    } 

が、これはあなたに参考になっことを願っています。

+0

あなたのANSに感謝のが、あなたのコードとGraphRequstの私のコードは –

+0

同じUはあなたがの2行目を読めば、私はuが... –

+0

親愛なるをやろうとしているかを理解カントよりbczを説明plzはできログは、そのプールのサイズ= 9、アクティブなスレッド= 9、私はそのアプリケーションがアクティブなスレッドの限界を超えていると思うと思います。 AsyncTaskにはexecuteOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)メソッドがあります。問題を克服する –

0

問題は、ターゲットとしているAndroidプラットフォームのバージョンです。 AsyncTasksは、(現在のような)並列実行プログラムではなく、シリアル実行プログラムによって処理されます。それ以外の場合は、スレッドキャップに達するとRejectedExecutionExceptionが返されます。

https://developer.android.com/reference/android/os/AsyncTask.html#SERIAL_EXECUTOR

+0

はい、あなたの右の例外RejectedExecutionExceptionは、アプリケーションがスレッドキャップに達すると賞賛します。私たちは、KitKat以上のAsyncTaskのスレッドの並列性をMyAsyncTaskタスク= new MyAsyncTask()で保証します。 \t task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); –

+0

並列処理が絶対必要でない限り、すべての要求が1つのワーカースレッドで処理されるようにIntentServiceを使用することをお勧めします。 –

関連する問題