【问题标题】:maps not working in android地图在android中不起作用
【发布时间】:2011-12-10 08:38:26
【问题描述】:

我正在使用以下地图类在我的 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() 方法的行,如果我不评论它会有问题吗?
- 请帮助...提前致谢。

【问题讨论】:

  • com.wglxy.example.dash1.map.onCreate(map.java:75) 该行导致空指针。检查一下。
  • @blessenm 第 75 行:if (addresses.size() > 0) { 似乎地址为 NULL...但为什么呢?

标签: android google-maps android-emulator android-maps


【解决方案1】:

【讨论】:

  • 我尝试了您提供的链接,在以下链接中我发现了我的确切问题。 code.google.com/p/android/issues/detail?id=8816 我尝试了评论#21 中给出的解决方案,但它对我不起作用。您能否建议我该怎么做才能继续我的 android 应用程序开发?
  • 您的应用程序和代码没问题...只需尝试在实际设备而不是模拟器中运行一次
  • 我试过了,它可以在实际设备上运行,但是您能否建议我为模拟器提供一些解决方案,因为我没有自己的实际设备。
  • hmmm..也许你将不得不尝试使用较低的 android 版本,如 1.6(emulator/project api) 级别我认为它会工作..
【解决方案2】:

APi docs 中指定,如果找不到任何匹配,地理编码器可以返回 null。

在 frankenstein 提到的实际设备中试用。或者,如果您使用的是模拟器,请确保它使用的是 google api。

【讨论】:

    【解决方案3】:

    如果您的最低 SDK 设置允许,请尝试在 API 7 级模拟器上运行,它应该可以正常工作,

    【讨论】:

    • 我尝试通过 Eclipse 启动 API 7 级模拟器,但它没有启动。它给出的错误如下...模拟器:错误:未知皮肤名称'WVGA800'
    • 我不明白我的所有平台都已正确下载。
    猜你喜欢
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2017-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多