Android gridview适配器parent.getChildAt(位置)返回nullPointerException

Android gridview适配器parent.getChildAt(位置)返回nullPointerException,android,gridview,broadcastreceiver,Android,Gridview,Broadcastreceiver,我有一个带有可下载项目gridview的下载管理器,下载完成后,我需要更新gridview按钮以向用户显示下载已完成,因此我使用BroadcastReceiver调用适配器并通知它显示更改,但我在parent.getChildAtposition中收到nullPointerException错误。我应该说,我在一个片段和一个活动中对listview使用了相同的代码,它确实工作得很好,但gridview存在一些问题。这是我的适配器getview: public View getView(final

我有一个带有可下载项目gridview的下载管理器,下载完成后,我需要更新gridview按钮以向用户显示下载已完成,因此我使用BroadcastReceiver调用适配器并通知它显示更改,但我在parent.getChildAtposition中收到nullPointerException错误。我应该说,我在一个片段和一个活动中对listview使用了相同的代码,它确实工作得很好,但gridview存在一些问题。这是我的适配器getview:

public View getView(final int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_special, null);

    TextView title = (TextView)vi.findViewById(R.id.pid); // title
    final TextView artist = (TextView)vi.findViewById(R.id.name); // artist name
    TextView duration = (TextView)vi.findViewById(R.id.price); // duration
    final TextView fileurl = (TextView)vi.findViewById(R.id.furl); // fileurl
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.image); // thumb image

    final TextView refrenceid = (TextView)vi.findViewById(R.id.dmrefrence); // refrence id

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);

    // Setting all values in listview
    title.setText(song.get(AllProductsActivity.TAG_PID));
    artist.setText(song.get(AllProductsActivity.TAG_NAME));
    duration.setText(song.get(AllProductsActivity.TAG_PRICE));
    fileurl.setText(song.get(AllProductsActivity.TAG_FILEURL));
    imageLoader.DisplayImage(song.get(AllProductsActivity.TAG_DESCRIPTION), thumb_image);

    final ImageButton pauseButton=(ImageButton)vi.findViewById(R.id.cancelButton); // image button

    final ImageButton imageButton=(ImageButton)vi.findViewById(R.id.imageButton1); // image button
    imageButton.setOnClickListener(new View.OnClickListener() {     
        @Override
        public void onClick(View arg0) {
            // starting background task to download product
            final String dfileurl = fileurl.getText().toString();
            final String fname = artist.getText().toString();

            imageButton.setVisibility( View.GONE );
            pauseButton.setVisibility( View.VISIBLE );
            SpecialFragment x = new SpecialFragment();

            long id = x.myClickdwnl(fname,dfileurl,pauseButton,activity.getApplicationContext());
            downloadIdToPositionMap.put(id, position);
            refrenceid.setText(Long.toString(id));

       }
    });
    /* Cancel Download */
    pauseButton.setOnClickListener(new View.OnClickListener() {     
        @Override
        public void onClick(View arg0) {
            // starting background task to download product
            final String dnid = refrenceid.getText().toString();
            pauseButton.setVisibility( View.GONE );
            imageButton.setVisibility( View.VISIBLE );
            HomeFragment x = new HomeFragment();

            x.Canceldwnl(dnid,activity.getApplicationContext());

       }
    });

    if(this.isDownloadFinished(position)){
       //ViewTreeObserver tree = parent.getViewTreeObserver();

       View v = parent.getChildAt(position);
       ImageButton cancelButton = (ImageButton) v.findViewById(R.id.cancelButton);
       ImageButton successButton = (ImageButton) v.findViewById(R.id.succButton);
       cancelButton.setVisibility( View.GONE );
       successButton.setVisibility( View.VISIBLE );

       for(int i=0; i<this.finishedDownloadPositions.size();i++){
           if(this.finishedDownloadPositions.get(i) == position){
               this.finishedDownloadPositions.remove(i);
           }
       }

    }

    return vi;
}
和logcat:

08-12 11:51:04.881: E/AndroidRuntime(850): FATAL EXCEPTION: main
08-12 11:51:04.881:E/AndroidRuntime850:java.lang.NullPointerException 08-12 11:51:04.881:E/AndroidRuntime850:at com.example.one.GridAdapter.getViewGridAdapter.java:123 08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.AbsListView.ActainViewAbsListView.java:2143 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.makendaddviewgridview.java:1341 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.makeRowGridView.java:341 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.GridView.fillSpecificGridView.java:543 08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.GridView.layoutChildrenGridView.java:1240 2008-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.AbsListView.onLayoutAbsListView.java:1994 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at android.support.v4.view.ViewPager.onLayoutViewPager.java:1528 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.LinearLayout.setChildFrameLinearLayout.java:1663 08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.LinearLayout.layoutVerticalLinearLayout.java:1521 08-12 11:51:04.881:E/AndroidRuntime850:at android.widget.LinearLayout.onLayoutLinearLayout.java:1434 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at-android.widget.FrameLayout.onLayoutFrameLayout.java:448 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.view.layoutView.java:14008 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewGroup.layoutViewGroup.java:4373 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl.performLayoutViewRootImpl.java:1892 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl.performTraversalsViewRootImpl.java:1711 08-12 11:51:04.881:E/AndroidRuntime850:at-android.view.ViewRootImpl.doTraversalViewRootImpl.java:989 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.ViewRootImpl$TraversalRunnable.runViewRootImpl.java:4351 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer$CallbackRecord.runChoreographer.java:749 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer.docallbackChoreographer.java:562 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer.doFrameChoreographer.java:532 08-12 11:51:04.881:E/AndroidRuntime850:at android.view.Choreographer$FrameDisplayEventReceiver.runChoreographer.java:735 08-12 11:51:04.881:E/AndroidRuntime850:at-android.os.Handler.handleCallbackHandler.java:725 08-12 11:51:04.881:E/AndroidRuntime850:at android.os.Handler.dispatchMessageHandler.java:92 08-12 11:51:04.881:E/AndroidRuntime850:at android.os.Looper.Looper.java:137 08-12 11:51:04.881:E/AndroidRuntime850:at android.app.ActivityThread.mainActivityThread.java:5041 08-12 11:51:04.881:E/AndroidRuntime850:at java.lang.reflect.Method.invokenactive方法 08-12 11:51:04.881:E/AndroidRuntime850:at java.lang.reflect.Method.invokeMethod.java:511 08-12 11:51:04.881:E/AndroidRuntime850:com.android.internal.os.ZygoteInit$methodAndArgscaler.runZygoteInit.java:793 08-12 11:51:04.881:E/AndroidRuntime850:com.android.internal.os.ZygoteInit.mainZygoteInit.java:560
08-12 11:51:04.881:E/AndroidRuntime850:at dalvik.system.NativeStart.main本机方法

尝试使用上下文而不是getView方法

  BroadcastReceiver griddownloadReceiver = new BroadcastReceiver() {

  @Override
  public void onReceive(Context context, Intent intent) {
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   //check if the broadcast message is for our Enqueued download
   long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);

   //((GridAdapter)  getActivity().getListAdapter()).setDownloadFinished(referenceId);
   GridView gv1 = (GridView) context.findViewById(R.id.grid_view);
   adapter = (GridAdapter) gv1.getAdapter();
   //final GridAdapter adapter = (GridAdapter) ((GridView) getView()).getAdapter();

    adapter.setDownloadFinished(referenceId);
    adapter.notifyDataSetChanged();

   // Ask the adapter to refresh the ListView
   //adapter.notifyDataSetChanged();

  }
};//end of broadcast reciever
如果没有
his不起作用请告诉我我有另一个想法

如果您不想直接对视图本身进行操作,请修改基础数据并通知适配器刷新viewi测试的上下文,那就不走运了。同样的错误。nullPointerException
  BroadcastReceiver griddownloadReceiver = new BroadcastReceiver() {

  @Override
  public void onReceive(Context context, Intent intent) {
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   //check if the broadcast message is for our Enqueued download
   long referenceId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);

   //((GridAdapter)  getActivity().getListAdapter()).setDownloadFinished(referenceId);
   GridView gv1 = (GridView) context.findViewById(R.id.grid_view);
   adapter = (GridAdapter) gv1.getAdapter();
   //final GridAdapter adapter = (GridAdapter) ((GridView) getView()).getAdapter();

    adapter.setDownloadFinished(referenceId);
    adapter.notifyDataSetChanged();

   // Ask the adapter to refresh the ListView
   //adapter.notifyDataSetChanged();

  }
};//end of broadcast reciever