2014-10-08 111 views
-1

我是一個android編程和堆棧溢出的新手。我的問題在這裏是在onclick方法中的mylongitudey給予null值。我有3項活動,其中一項是其中一項。我想要谷歌地圖的經緯度,並將這些點發送到另一個活動。這裏的主要問題是,它沒有給出緯度和經度值,而是給出空值。我找不到錯誤。誰能幫我?先謝謝了。緯度和經度值給null

SharedPreferences points; 
SharedPreferences.Editor ed; 

Address returnedAddress; 

double mylongitudey,mylatitudey; 
String latilongi; 
ImageView iv; 
Button manual,proceed; 

GoogleMap map; 
LatLng mylat ; 

String latlong; 
Marker mymarker; 
boolean markerclicked; 
double mylatitudeyd,mylongitudeyd; 
String addstringaa; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.two_buttons); 
    actionBar = getActionBar(); 
    actionBar.setBackgroundDrawable(new ColorDrawable(Color.BLACK)); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 


    Toast.makeText(this,"Please select the destination by long click", Toast.LENGTH_LONG).show(); 

    LatLng mylat; 
    final GoogleMap map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap(); 
    map.setOnMarkerDragListener(this); 
    map.setTrafficEnabled(true); 
// map.setOnMyLocationButtonClickListener(this); 

    SharedPreferences shared = getSharedPreferences("map", 0); 
    String mylats = (shared.getString("twolati", "NoValue")); 
    String mylong= (shared.getString("twolong", "NoValue")); 
    double dmylats = Double.valueOf(mylats); 
    double dmylong = Double.valueOf(mylong); 
    map.animateCamera(CameraUpdateFactory.zoomTo(15)); 
    mylat = new LatLng(dmylats, dmylong); 
    try { 
    Toast.makeText(this, "This is"+mylats,Toast.LENGTH_LONG).show(); 
} catch (Exception e) { 
    Toast.makeText(this,"problem in mylat",0); 
    e.printStackTrace(); 
} 


map.moveCamera(CameraUpdateFactory.newLatLngZoom(mylat, 13)); 
map.addMarker(new MarkerOptions().position(mylat).title("You are Here")); 

markerclicked=false; 
    //onMyLocationButtonClick(); 
    map.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { 

    @Override 
    public void onMapLongClick(LatLng arg0) { 
     // TODO Auto-generated method stub 


     if(markerclicked==false) 
     { 
     mymarker = map.addMarker(new MarkerOptions().position(arg0).title("Your Destination").draggable(true)); 
     markerclicked=true; 
    }else{ 

     Toast.makeText(getApplicationContext(), "Marker Aready Set..!", Toast.LENGTH_LONG).show(); 

    } 

    } 
}); 


    map.setOnMyLocationChangeListener(new GoogleMap.OnMyLocationChangeListener() { 
    LatLng mylatlong; 
    @Override 
    public void onMyLocationChange(Location arg0) { 

     // TODO Auto-generated method stub 
     mylongitudey = arg0.getLongitude(); 
     mylatitudey = arg0.getLatitude(); 
     mylatlong = new LatLng(arg0.getLatitude(), arg0.getLongitude()); 
     //sourcepoint=String.format(" ",mylat); 

// map.moveCamera(CameraUpdateFactory.newLatLngZoom(mylat,1)); 
     map.moveCamera(CameraUpdateFactory.newLatLngZoom(mylatlong, 14)); 


    } 
}); 


// Toast.makeText(this, getmapid, Toast.LENGTH_LONG).show(); 

SharedPreferences pr= getSharedPreferences("reserve", 0); 
latilongi=pr.getString("sourcepoint", "sourcepoint"); 

manual=(Button)findViewById(R.id.manuel); 
manual.setOnClickListener(this); 

proceed=(Button)findViewById(R.id.proceed); 
proceed.setOnClickListener(this); 

} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 



    getMenuInflater().inflate(R.menu.actionmenu, menu); 

    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Take appropriate action for each action item click 
    // Toast.makeText(MainActivity.this, item.getTitle(), 
    // Toast.LENGTH_LONG).show(); 


    switch (item.getItemId()) { 

    case android.R.id.home: 
     if (getParentActivityIntent() == null) { 
      Log.i("tag", "You have forgotten to specify the parentActivityName in the  AndroidManifest!"); 
      onBackPressed(); 
     } else { 
      NavUtils.navigateUpFromSameTask(this); 
     } 
     return true; 

    case R.id.action_refresh: 
     // refresh 

     Intent intent = new Intent(Drop_Off_Location.this, Main.class); 
     startActivityForResult(intent, 0); 
     return true; 

    default: 
     return super.onOptionsItemSelected(item); 
    } 
} 



public void onNothingSelected(AdapterView<?> arg0) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void onClick(View v) { 



     try { 
      if (v.getId() == R.id.proceed) { 
       /* Toast.makeText(this, "address"+mylongitudey, 0); 
       Toast.makeText(this, " destination in DOL class "+addstringaa, 0).show();*/ 
       points= getSharedPreferences("map", 0); 
       ed=points.edit(); 
       String twolatitudey = String.valueOf(mylatitudey); 
       String twolongitudey = String.valueOf(mylongitudey);           
       ed.putString("twolatitudey",twolatitudey); 
       ed.putString("twolongitudey", twolongitudey);     
       ed.commit(); 
       Toast.makeText(this, "dest longitude"+mylongitudey, Toast.LENGTH_LONG).show(); 
       Intent intent = new Intent(Drop_Off_Location.this,Autofill.class); 
       startActivity(intent); 

      } 
      else if(v.getId()==R.id.manuel) 
      { 
       Intent intent = new Intent(Drop_Off_Location.this,Reserve.class); 
        startActivity(intent);     
      } 
     } catch (Exception e) { 
      Toast.makeText(this,"error in onclick"+e, Toast.LENGTH_SHORT).show(); 
      e.printStackTrace(); 
     } 
} 

的logcat詳細:

10-08 02:23:53.965: D/dalvikvm(3221): GC_FOR_ALLOC freed 111K, 25% free 7167K/9528K, paused 132ms, total 134ms 
10-08 02:23:53.975: I/dalvikvm-heap(3221): Grow heap (frag case) to 9.411MB for 2457616-byte allocation 
10-08 02:23:54.145: D/dalvikvm(3221): GC_FOR_ALLOC freed 2K, 20% free 9565K/11932K, paused 167ms, total 167ms 
10-08 02:23:55.895: W/System.err(3221): java.io.IOException: Service not Available 
10-08 02:23:55.895: W/System.err(3221):  at android.location.Geocoder.getFromLocation(Geocoder.java:136) 
10-08 02:23:55.905: W/System.err(3221):  at jasperit.atlcitylimo.Autofill.onCreate(Autofill.java:189) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.Activity.performCreate(Activity.java:5231) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
10-08 02:23:55.905: W/System.err(3221):  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-08 02:23:55.905: W/System.err(3221):  at android.os.Looper.loop(Looper.java:136) 
10-08 02:23:55.905: W/System.err(3221):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-08 02:23:55.905: W/System.err(3221):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-08 02:23:55.915: W/System.err(3221):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-08 02:23:55.915: W/System.err(3221):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-08 02:23:55.915: W/System.err(3221):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-08 02:23:55.915: W/System.err(3221):  at dalvik.system.NativeStart.main(Native Method) 
10-08 02:23:56.015: W/System.err(3221): java.io.IOException: Service not Available 
10-08 02:23:56.015: W/System.err(3221):  at android.location.Geocoder.getFromLocation(Geocoder.java:136) 
10-08 02:23:56.035: W/System.err(3221):  at jasperit.atlcitylimo.Autofill.onCreate(Autofill.java:227) 
10-08 02:23:56.035: W/System.err(3221):  at android.app.Activity.performCreate(Activity.java:5231) 
10-08 02:23:56.035: W/System.err(3221):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-08 02:23:56.045: W/System.err(3221):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
10-08 02:23:56.045: W/System.err(3221):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
10-08 02:23:56.045: W/System.err(3221):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
10-08 02:23:56.045: W/System.err(3221):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
10-08 02:23:56.045: W/System.err(3221):  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-08 02:23:56.045: W/System.err(3221):  at android.os.Looper.loop(Looper.java:136) 
10-08 02:23:56.085: W/System.err(3221):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-08 02:23:56.085: W/System.err(3221):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-08 02:23:56.085: W/System.err(3221):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-08 02:23:56.085: W/System.err(3221):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-08 02:23:56.095: W/System.err(3221):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-08 02:23:56.095: W/System.err(3221):  at dalvik.system.NativeStart.main(Native Method) 
10-08 02:23:56.255: I/Choreographer(3221): Skipped 688 frames! The application may be doing too much work on its main thread. 
10-08 02:23:57.585: I/Choreographer(3221): Skipped 267 frames! The application may be doing too much work on its main thread. 
10-08 02:23:58.885: I/Choreographer(3221): Skipped 114 frames! The application may be doing too much work on its main thread. 
10-08 02:23:59.675: I/Choreographer(3221): Skipped 107 frames! The application may be doing too much work on its main thread. 
+0

嗨,logcat顯示錯誤java.io.IOException:服務不可用....看來你還沒有註冊的GPS服務....你可以給更多的細節,你是否已經添加了許可和關鍵在清單 – Toppers 2014-10-08 06:37:14

+0

@Toppers感謝您的答覆,但它仍然工作..你可以請建議別的東西嗎? – 2014-10-08 06:40:26

+0

@Toppers同樣的例外是在另一項活動中也給予,但經度和緯度點正在給出正確的值。 – 2014-10-08 06:45:16

回答

1
//instance variables 
private GoogleMap googleMap; 
private double longitude = 0.0; 
private double latitude = 0.0; 
private LocationManager locationManager = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); // your layout 
    try { 
    initilizeMap();  

    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 1, this); 

    googleMap.setMyLocationEnabled(true); 
    googleMap.getUiSettings().setMyLocationButtonEnabled(true); 

    } 
} catch (Exception e) { 
     e.printStackTrace(); 
} 
} 


private void initilizeMap() { 
    if (googleMap == null) { 
     googleMap = ((MapFragment) getFragmentManager().findFragmentById(
       R.id.map)).getMap(); //provide your id  

     // check if map is created successfully or not 
     if (googleMap == null) { 
      Toast.makeText(getApplicationContext(), 
        "Sorry! unable to create maps", Toast.LENGTH_SHORT) 
        .show(); 
     } 
    } 
} 

    @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 
     longitude = location.getLongitude(); 
     latitude = location.getLatitude(); 
     //System.out.println(latitude+ " "+longitude); 
     if(!isStopFocusEnabled){ 
      CameraPosition cameraPosition = new CameraPosition.Builder().target(
       new LatLng(latitude, longitude)).zoom(12).build(); 
      googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 
     } 


} 

在清單下面的代碼必須有

 <permission 
    android:name="com.ani.map.permission.MAPS_RECEIVE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.ani.map.permission.MAPS_RECEIVE" /> 

<uses-sdk 
    android:minSdkVersion="11" 
    android:targetSdkVersion="19" /> 

<uses-permission android:name="android.permission.ACCESS_GPS" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 



<!-- Required to show current location --> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

<!-- Required OpenGL ES 2.0. for Maps V2 --> 
<uses-feature 
    android:glEsVersion="0x00020000" 
    android:required="true" /> 


    <!-- Goolge API Key --> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="YOUR KEY" /> 

    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version"/> 

//相應地更改它....它會肯定工作...

-1
public boolean onTouchEvent(MotionEvent event) 
{ 
    int X = (int)event.getX();   
    int Y = (int)event.getY(); 

    GeoPoint geoPoint = mapView.getProjection().fromPixels(X, Y); 
} 
+1

請描述您的答案。 – hofmeister 2014-10-08 06:52:05