2016-08-30 2 views
0

Я звоню GraphRequest для Facebook комментировать счет в ListView Адаптер getView(). Вот мой кодНесколько вызовов Facebook GraphRequest crash app

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(); 
    } 


} 

Как число вызовы GraphRequest увеличения приложения получить аварийное завершение из-за максимальное количество активных потоков.

Вот Вход

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

Я думаю, что вы внедряете его неправильно. Я предоставляю код PLZ, возможно, он будет работать, так как в моем случае он отлично работает.

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(); 




    } 

и когда лет получить этот пункт использовать их в listView.I надеюсь, что это будет полезно для вас.

+0

Спасибо за ваш анс, но ваш код с, и моим код GraphRequst такой же –

+0

может у плз объяснить больше BCZ я не могу понять то, что у пытаюсь сделать ... –

+0

Дорогой, если вы читаете 2-й линии журнал, говорящий о размере пула = 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 araise после того, как приложение достигнет крышки потока. и мы можем обеспечить параллельность потоков AsyncTask в KitKat и выше с помощью задачи MyAsyncTask = new MyAsyncTask(); \t task.executeOnExecutor (AsyncTask.THREAD_POOL_EXECUTOR); –

+0

Если параллелизм не является абсолютным, я бы рекомендовал вам использовать IntentService, поскольку он гарантирует, что все запросы будут обрабатываться на одном рабочем потоке. –