2016-11-30 49 views
0

我在android中创建我的第一个应用程序,我使用抽屉布局和获取当前位置的服务,并将数据发送到Broadacast接收器,这应该是更新仪表板片段中的纬度和经度textview ,但是当updateDashLocation被调用时,我收到这个错误:由于:java.lang.NullPointerException:尝试在DashLatitude的空对象引用上调用虚拟方法'void android.widget.TextView.setText(java.lang.CharSequence)'。的setText(纬度);和DashLongitude.setText(经度);在片段中更改文本视图文本

片段代码

public class DashboardFragment extends Fragment { 


public DashboardFragment() { 
    // Required empty public constructor 
} 

View dashboardInflatedView; 
TextView DashLatitude,DashLongitude; 
String TAG = "GPSTracker"; 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    Toolbar toolbar = ((MainActivity)getActivity()).toolbar; 
    toolbar.setTitle("Dashboard"); 

    dashboardInflatedView = inflater.inflate(R.layout.fragment_dashboard, container, false); 
    DashLatitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLatitude); 
    DashLongitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLongitude); 

    return dashboardInflatedView; 
} 

public void updateDashLocation(String latitude, String longitude){ 

    //Log.d(TAG, "Update Dashboard Location"); 
    DashLatitude.setText(latitude); 
    DashLongitude.setText(longitude); 
} 

}

如何我可以访问仪表盘碎片的元素时updateDashLocation叫?

+1

看起来像在创建片段视图之前调用updateDashLocation – diedu

+0

您确定您的视图有合适的ID吗? – LukeWaggoner

+0

id是正确的! updateDashLocation在创建片段后调用。删除现金后我重复测试,我收到导致:java.lang.NullPointerException:尝试调用虚拟方法'android.view.View android.view.View.findViewById(int)'对空引用对象,如果我把DashLatitude .setText( “测试”);在片段的onCreateView期间,文本正确更新...以某种方式,我无法在充气器后访问相同片段中的片段视图!任何人都可以帮助我? – Cristian

回答

0

尝试在updateDashLocation方法被调用时声明TextViews?

public class DashboardFragment extends Fragment { 

     public DashboardFragment() { 
      // Required empty public constructor 
     } 

     View dashboardInflatedView; 
     TextView DashLatitude,DashLongitude; 
     String TAG = "GPSTracker"; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 

      Toolbar toolbar = ((MainActivity)getActivity()).toolbar; 
      toolbar.setTitle("Dashboard"); 

      dashboardInflatedView = inflater.inflate(R.layout.fragment_dashboard, container, false); 
      return dashboardInflatedView; 
     } 

     public void updateDashLocation(String latitude, String longitude){ 

      DashLatitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLatitude); 
      DashLongitude = (TextView)dashboardInflatedView.findViewById(R.id.DashLongitude); 

      //Log.d(TAG, "Update Dashboard Location"); 
      DashLatitude.setText(latitude); 
      DashLongitude.setText(longitude); 
     } 
0

我找到了解决办法,问题是主要活动,现在在广播接收器,当作为被传递坐标,代码:

// Define the callback for what to do when data is received 
private BroadcastReceiver locationReceiver = new BroadcastReceiver() { 

    @Override 
    public void onReceive(Context context, Intent intent) { 

     Log.d(TAG, "Broadcastreceiver Coordinates"); 

     int resultCode = intent.getIntExtra("resultCode", RESULT_CANCELED); 
     if (resultCode == RESULT_OK) { 
      Double latitude= intent.getDoubleExtra("latitude",0); 
      Double longitude= intent.getDoubleExtra("longitude",0); 

      DashboardFragment dashboardFrag = (DashboardFragment) 
        manager.findFragmentByTag("Dashboard"); 
      dashboardFrag .updateLocation(latitude.toString(),longitude.toString()); 
      Log.d(TAG, latitude.toString()+" --- "+longitude.toString()); 
     } 
    } 
}; 

我得到的片段,该标签和访问方法