2016-11-30 47 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()); 
     } 
    } 
}; 

我得到的片段,該標籤和訪問方法