2011-12-10 68 views
0

工作我使用下面的地圖類在我的Android應用程序使用地圖...映射不是在Android的

package com.wglxy.example.dash1; 

import java.io.IOException; 
import java.util.List; 

import android.app.AlertDialog; 
import android.content.Intent; 
import android.location.Address; 
import android.location.Geocoder; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuInflater; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 

public class map extends MapActivity { 

    private MapView mapview; 
    private Geocoder geocoder; 
    private Button map1; 
    String[] myadd; 
    private int len; 
    private GeoPoint p; 
    private MapController controller; 
    private TextView helloText; 
    private List<Address> addresses; 
    private int i; 
    private String[] mynames; 
    private ImageButton info; 
    private String[] citysearch7 = new String[1]; 
    private ImageButton search; 
    private ImageButton home; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.map); 

     Intent intent = getIntent(); 
     myadd = intent.getStringArrayExtra("strings"); 
     mynames = intent.getStringArrayExtra("names"); 
     info = (ImageButton) findViewById(R.id.info); 
     search = (ImageButton) findViewById(R.id.search1); 
     home = (ImageButton) findViewById(R.id.hom); 
     len = myadd.length; 
     System.out.println("Length=" + len); 
     mapview = (MapView) findViewById(R.id.mapview); 
     mapview.setBuiltInZoomControls(true); 
     geocoder = new Geocoder(this); 
    // check(); 
     while (i != len) { 
      try { 
       System.out.println("Coming inside try catch and adress=" 
         + myadd[i]); 

       addresses = geocoder 
         .getFromLocationName(myadd[i].toString(), 1); 

      } catch (IOException e) { 
       System.out.println("Catching"); 
       e.printStackTrace(); 
      } 

      if (addresses.size() > 0) { 
       p = new GeoPoint((int) (addresses.get(0).getLatitude() * 1E6), 
         (int) (addresses.get(0).getLongitude() * 1E6)); 

       controller = mapview.getController(); 
       controller.setZoom(12); 

       MapOverlay mapOverlay = new MapOverlay(map.this, p, mynames[i]); 
       List<Overlay> listOfOverlays = mapview.getOverlays(); 
       listOfOverlays.add(mapOverlay); 

       controller.animateTo(p, new Runnable() { 
        public void run() { 
         controller.setZoom(12); 
        } 
       }); 
       mapview.invalidate(); 

      } else { 
       AlertDialog.Builder adb = new AlertDialog.Builder(map.this); 
       adb.setTitle("Google Map"); 
       adb.setMessage("Please Provide the Proper Place"); 
       adb.setPositiveButton("Close", null); 
       adb.show(); 
      } 
      i++; 
     } 

    } 

    void check() { 
     info.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       startActivity(new Intent(getApplicationContext(), 
         AboutActivity.class)); 
      } 
     }); 
     home.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(getApplicationContext(), start.class); 
       intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(intent); 
      } 
     }); 
     search.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent intent = new Intent(getApplicationContext(), 
         search.class); 
       startActivity(intent); 
      } 
     }); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.bloodmenu: 
      startActivity(new Intent(getApplicationContext(), search.class)); 
      break; 
     case R.id.bankmenu: 
      citysearch7[0] = ""; 
      Intent intent = new Intent(getApplicationContext(), 
        searchbank.class); 
      intent.putExtra("search", citysearch7); 
      startActivity(intent); 
      break; 
     case R.id.updatemenu: 
      startActivity(new Intent(getApplicationContext(), update.class)); 
      break; 
     case R.id.registermenu: 
      Intent intent1 = new Intent(getApplicationContext(), register.class); 
      Bundle b = new Bundle(); 
      b.putString("name", ""); 
      b.putString("house", ""); 
      b.putString("street", ""); 
      b.putString("city", ""); 
      b.putString("blood", ""); 
      b.putString("phone", ""); 
      b.putString("file", "register"); 
      intent1.putExtras(b); 
      startActivity(intent1); 
      break; 
     } 
     return true; 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 

} 

,但它給出了一個錯誤。其日誌如下:

D/dalvikvm( 466): GC_FOR_MALLOC freed 8171 objects/631112 bytes in 54ms 

D/dalvikvm( 466): GC_FOR_MALLOC freed 6139 objects/371288 bytes in 55ms 

I/System.out( 466): Length=3 

I/System.out( 466): Coming inside try catch and adress=Surya Nagar Agra 

I/System.out( 466): Catching 

W/System.err( 466): java.io.IOException: Service not Available 

W/System.err( 466): at android.location.Geocoder.getFromLocationName(Geocoder.java:159) 

W/System.err( 466): at com.wglxy.example.dash1.map.onCreate(map.java:68) 

W/System.err( 466): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

W/System.err( 466): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

W/System.err( 466): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 

W/System.err( 466): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 

W/System.err( 466): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 

W/System.err( 466): at android.os.Handler.dispatchMessage(Handler.java:99) 

W/System.err( 466): at android.os.Looper.loop(Looper.java:123) 

W/System.err( 466): at android.app.ActivityThread.main(ActivityThread.java:4627) 

W/System.err( 466): at java.lang.reflect.Method.invokeNative(Native Method) 

W/System.err( 466): at java.lang.reflect.Method.invoke(Method.java:521) 

W/System.err( 466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 

W/System.err( 466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

W/System.err( 466): at dalvik.system.NativeStart.main(Native Method) 

D/AndroidRuntime( 466): Shutting down VM 

W/dalvikvm( 466): threadid=1: thread exiting with uncaught exception (group=0x4001d800) 

E/AndroidRuntime( 466): FATAL EXCEPTION: main 

E/AndroidRuntime( 466): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.wglxy.example.dash1/com.wglxy.example.dash1.map}: java.lang.NullPointerException 

E/AndroidRuntime( 466): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663) 

E/AndroidRuntime( 466): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679) 

E/AndroidRuntime( 466): at android.app.ActivityThread.access$2300(ActivityThread.java:125) 

E/AndroidRuntime( 466): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033) 

E/AndroidRuntime( 466): at android.os.Handler.dispatchMessage(Handler.java:99) 

E/AndroidRuntime( 466): at android.os.Looper.loop(Looper.java:123) 

E/AndroidRuntime( 466): at android.app.ActivityThread.main(ActivityThread.java:4627) 

E/AndroidRuntime( 466): at java.lang.reflect.Method.invokeNative(Native Method) 

E/AndroidRuntime( 466): at java.lang.reflect.Method.invoke(Method.java:521) 

E/AndroidRuntime( 466): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) 

E/AndroidRuntime( 466): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626) 

E/AndroidRuntime( 466): at dalvik.system.NativeStart.main(Native Method) 

E/AndroidRuntime( 466): Caused by: java.lang.NullPointerException 

E/AndroidRuntime( 466): at com.wglxy.example.dash1.map.onCreate(map.java:75) 

E/AndroidRuntime( 466): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 

E/AndroidRuntime( 466): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

E/AndroidRuntime( 466): ... 11 more 

W/ActivityManager( 70): Force finishing activity com.wglxy.example.dash1/.map 

W/ActivityManager( 70): Force finishing activity com.wglxy.example.dash1/.search 

W/ActivityManager( 70): Activity pause timeout for HistoryRecord{44efd6a8 com.wglxy.example.dash1/.map} 

W/ActivityManager( 70): Launch timeout has expired, giving up wake lock! 

W/ActivityManager( 70): Activity idle timeout for HistoryRecord{44ed9bb8 com.wglxy.example.dash1/.start} 

W/ActivityManager( 70): Activity destroy timeout for HistoryRecord{44edc6e8 com.wglxy.example.dash1/.search} 

W/ActivityManager( 70): Activity destroy timeout for HistoryRecord{44efd6a8 com.wglxy.example.dash1/.map} 

D/dalvikvm( 275): GC_EXPLICIT freed 1903 objects/139672 bytes in 196ms 

D/dalvikvm( 407): GC_EXPLICIT freed 119 objects/9440 bytes in 130ms 

D/dalvikvm( 416): GC_EXPLICIT freed 635 objects/50232 bytes in 145ms 

D/dalvikvm( 196): GC_EXPLICIT freed 808 objects/45672 bytes in 176ms 

請考慮打印聲明,我已經使用和使用,誰可以請幫助我瞭解我的問題??我也改變了我的鑰匙,並更新了,但徒勞無功。我的模擬器有什麼問題,我也嘗試創建一個新的模擬器,但它仍然無法正常工作。此外,我已經評論了調用check()方法的行,如果我不評論它,是否有問題?
- 請幫助...提前致謝。

+0

com.wglxy.example.dash1.map.onCreate(map.java:75) 該行導致空指針。檢查一下。 – blessenm

+0

@blessenm第75行:if(addresses.size()> 0){ 似乎addrresses是NULL ...但是爲什麼? – Antrromet

回答

0
+0

我嘗試了您提供的鏈接,並在以下鏈接中找到了我確切的問題。 http://code.google.com/p/android/issues/detail?id=8816 我嘗試瞭解決方案#21中給出的解決方案,但它不適用於我。你能否建議我該怎麼做才能繼續我的Android應用程序開發? – Antrromet

+0

你的應用程序和代碼是好的...只是嘗試運行一次在實際的設備,而不是在模擬器 – MKJParekh

+0

我試過了,它在實際設備上工作,但你可以請建議我一些解決方案的模擬器因爲我沒有實際我自己的設備。 – Antrromet

0

它在APi docs指定地址解析器可以返回null沒有找到任何匹配項。

嘗試它在像弗蘭肯斯坦提到的實際設備。或者,如果您使用的是仿真器,請確保它使用google api的。

0

如果您的最低SDK設置允許的話,儘量在API級別7模擬器上運行,它應該工作正常,

+0

我試圖通過Eclipse啓動API級別7模擬器,但它不啓動向上。它給出的錯誤如下... 模擬器:錯誤:未知的皮膚名稱'WVGA800' – Antrromet

+0

我不明白我的所有平臺已正確下載。 – Antrromet