夥計們,在按鈕單擊片段訪問方法從MainActivity
我試圖向用戶發送當前的經緯度從點擊一個按鈕在MainActivity到MapFragment(片段)。我使用的界面,從片段中實現inMainActivity但是當我嘗試接取從片段onButtonClick的方法,我收到了
在android.app.ActivityThread.main(ActivityThread.java:5221) 在java.lang.reflect中.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:899) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 引起:java.lang.NullPointerException:嘗試調用虛擬方法void com.xtechkid.blah.threadingapplication.M apDemoActivity.setupCurrlocation(com.google.android.gms.maps.model.LatLng)」上的空對象引用 在com.xtechkid.sudheej.threadingapplication.MainActivity.findLocation(MainActivity.java:67)
我的代碼如下
這裏是地圖片段
public class MapDemoActivity extends Fragment {
final LatLng MU = new LatLng(40.8874245, 67.0200729);
private GoogleMap mMap; // Might be null if Google Play services APK is not available.
CommInter mCallback;
public interface CommInter {
public void communicatesWithActivity(double lati,double longi);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
// if (context instanceof Activity){
a=(Activity) context;
//}
try{
mCallback = (CommInter) a;
}catch (ClassCastException e){
throw new ClassCastException(a.toString());
}
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
//setUpMapIfNeeded();
if (mMap != null) {
mMap.setMyLocationEnabled(true);
}
return view;
}
//This method when called from Main is throwing Exception
public void setupCurrlocation(LatLng MUSEUM) {
makeText(getContext(), "I am inside the function ", Toast.LENGTH_LONG).show();
System.out.println("I am inside the function");
/*CameraPosition cameraPosition = new CameraPosition.Builder()
.target(MUSEUM)
.zoom(10)
.bearing(70)
.tilt(25)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
*/
}
}
代碼從主要活動
import android.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.content.Intent;
import android.location.LocationManager;
import android.os.Bundle;
import android.provider.Settings;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.google.android.gms.maps.model.LatLng;
public class MainActivity extends AppCompatActivity implements MapDemoActivity.CommInter {
private TextView txtLocation;
private String provider;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void communicatesWithActivity(double lati, double longi) {
MapDemoActivity mapFrag = (MapDemoActivity)getSupportFragmentManager().findFragmentById(R.id.map);
final LatLng MUSEU = new LatLng(38.8874245, 77.0200729);
//final LatLng MUSEU = new LatLng(lati, longi);
mapFrag.setupCurrlocation(MUSEU);
}
public void findLocation(View v) {
//final LatLng setLoc = new LatLng(38.8874245, -77.0200729);
//// MapDemoActivity fragment;
// Fragment t = (Fragment)getSupportFragmentManager()findViewById(R.id.map);
// fragment.setupCurrlocation(v,setLoc);
txtLocation = (TextView) findViewById(R.id.textViewLocation);
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean isLocEnabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
if (!isLocEnabled) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
GPSTracker gps = new GPSTracker(MainActivity.this);
// check if GPS enabled
if(gps.canGetLocation()){
double latitude = gps.getLatitude();
double longitude = gps.getLongitude();
// \n is for new line
Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show();
txtLocation.setText("Lat: " + latitude + "Long: " + longitude);
//System.out.println(MUS);
//The PROBLEM IS HERE I DONT KNOW THE FIX
communicatesWithActivity(latitude,long);
}else{
// can't get location
// GPS or Network is not enabled
// Ask user to enable GPS/network in settings
gps.showSettingsAlert();
}
}
}
findFragmentById(R.id.map)返回null。在activity_main.xml中是否真的有一個ID爲「map」的片段? –