2011-09-03 25 views
59

Khi tôi chuyển từ khóa bản đồ gỡ lỗi sang khóa bản đồ đã ký của tôi, bản đồ của tôi ngừng hoạt động. Tôi nhận được các lỗi sau trong logcat:Bản đồ Google đã ký các lỗi khóa api trong Android

09-03 18:18:04.112: WARN/System.err(4073): IOException processing: 26 
09-03 18:18:04.112: WARN/System.err(4073): java.io.IOException: Server returned: 3 
09-03 18:18:04.112: WARN/System.err(4073):  at android_maps_conflict_avoidance.com.google.googlenav.map.BaseTileRequest.readResponseData(BaseTileRequest.java:115) 
09-03 18:18:04.112: WARN/System.err(4073):  at android_maps_conflict_avoidance.com.google.googlenav.map.MapService$MapTileRequest.readResponseData(MapService.java:1473) 
09-03 18:18:04.112: WARN/System.err(4073):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.processDataRequest(DataRequestDispatcher.java:1117) 
09-03 18:18:04.112: WARN/System.err(4073):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher.serviceRequests(DataRequestDispatcher.java:994) 
09-03 18:18:04.112: WARN/System.err(4073):  at android_maps_conflict_avoidance.com.google.googlenav.datarequest.DataRequestDispatcher$DispatcherServer.run(DataRequestDispatcher.java:1702) 
09-03 18:18:04.112: WARN/System.err(4073):  at java.lang.Thread.run(Thread.java:1019) 

Tôi đã kiểm tra lại mọi thứ, quyền và thư viện được đặt ra. Tôi đã tái tạo chìa khóa và không may mắn.

Bất kỳ ý tưởng nào?

+0

Đăng mã nơi ngoại lệ được ném. –

+0

tôi đã có cùng một vấn đề, nó làm việc một lần, sau đó mỗi lần sau, chạy, nhưng chỉ nạp một lưới màu xám và đã đưa ra các lỗi tương tự mà bạn đăng. –

+4

Bạn biết bạn nên chấp nhận câu trả lời phù hợp với bạn :) –

Trả lời

79

Tôi đã gặp vấn đề tương tự và tôi đã tìm thấy không có câu trả lời hữu ích nào trên internet để hy vọng điều này sẽ giúp mọi người trong tương lai.

Khi sử dụng GoogleMaps for Android, bạn cần có hai phím - gỡ lỗi và giải phóng.

Khóa "gỡ lỗi" là loại thuật ngữ gây hiểu lầm. Chìa khóa này cũng được sử dụng khi bạn phát triển ứng dụng trong Eclipse. Về cơ bản, hãy sử dụng khóa gỡ lỗi để phát triển, thử nghiệm, gỡ lỗi.

Khi bạn đã sẵn sàng khởi chạy ứng dụng vào Market, hãy đặt android:debuggable="false" trong AndroidManifest.xml và sử dụng khóa API đã ký.

Khi sử dụng khóa API đã ký, MapView sẽ chỉ hiển thị khi ứng dụng được cài đặt từ Android Market. Vì vậy, cài đặt ứng dụng từ Eclipse (Chạy dưới dạng, Gỡ lỗi dưới dạng, v.v.) hoặc dòng lệnh (adb install) sẽ không hiển thị số MapView.Hãy yên tâm, khi ứng dụng ở trong Market - bạn tải xuống và MapView sẽ hiển thị.

Với khóa API đã ký, nếu bạn triển khai ứng dụng từ Eclise, bạn sẽ nhận được cảnh báo "Máy chủ trả lại 3, IOProcessing Exception 26" - chỉ cần bỏ qua nó.

Lưu ý: Đồng thời đảm bảo không có trường hợp trùng lặp nào của cùng một MapView. Nếu ứng dụng của bạn cần "x" không. của MapView s, tạo "x" không. các khóa đã ký mới (một cho mỗi MapView) vì GoogleMaps có giới hạn truy vấn cho một cá thể MapView.

Để nhận cả hai khóa, hãy làm theo các bước cho Obtaining API keys for GoogleMaps on Android.

Mã hóa hạnh phúc!

UPDATE:

Liên kết ở trên cho việc thu thập các phím api bây giờ là một thủ tục không dùng nữa. Tham khảo Obtaining API keys for GoogleMaps Android API v2 về sau.

+0

Tôi không biết cách bạn có thể tạo nhiều hơn 1 khóa API GMaps cho mỗi ứng dụng. Khóa AFAIK, GMaps API được liên kết với .keystore (mà bạn sử dụng để ký ứng dụng của mình). Nó có nghĩa là cho mỗi ứng dụng, bạn chỉ có thể tạo 1 khóa API GMaps. – anticafe

+0

Hmm..bạn có một điểm hợp lệ. Có thể bạn tạo nhiều khóa đã ký? Mặc dù tôi không chắc chắn chữ ký sẽ là duy nhất hay không. –

+1

+1 Đó là câu trả lời tuyệt vời. –

1

Tôi vừa gặp chính xác cùng một vấn đề.

Không có mã do người dùng viết ném ngoại lệ: nó được tạo trong nhật ký Eclipse và kết quả là bạn không thấy bất kỳ lát bản đồ Google nào. Giống như Jen, tôi tái sinh chìa khóa, vô ích.

Nền tảng là Android 3.2, thiết bị là Asus Transformer, kết nối là WiFi.

FYI ứng dụng Android 2.2 của tôi hoạt động tốt, truy xuất bản đồ trên Droid qua 3G.

Đây là giải pháp cho vấn đề của tôi, hy vọng nó sẽ giúp Jen:

Trong trường hợp của tôi, nếu tôi cài đặt phiên bản phát hành vào Transformer bằng cách sử dụng "Debug là" biểu tượng Eclipse, với Transformer USB-tethered, bản đồ không thành công như mô tả ở trên (FYI đây là quy trình tôi đã sử dụng thành công nhiều lần với Android 2.2 và các thiết bị khác). Vì vậy, tôi đã thử thay vào đó: Tôi sử dụng tùy chọn Tệp tin Eclipse | Xuất khẩu ... để tạo APK phát hành và sau đó cài đặt APK đó lên Biến áp bằng ứng dụng Đồng bộ hóa của Asus. Mọi thứ đều ổn. Các ô bản đồ xuất hiện.

+0

Bạn nói đúng, đó không phải là vấn đề về mã. Tôi đã thử tạo các khóa trong các ứng dụng khác nhau, trong các tài khoản gmail khác nhau và vẫn là lỗi tương tự. Tôi nghĩ có lẽ đó là thiết bị của tôi, một chiếc HTC G2 chạy Anroid 2.3, sau đó tôi đã thử sử dụng trình giả lập với các apis Android khác nhau và không có may mắn ở đó. Tôi đã thử đề xuất của bạn và cài đặt apk cho thiết bị của tôi bằng AstroFile và vấn đề vẫn còn đó. Cảm ơn bạn mặc dù, nó là tốt để nghe rằng tôi không phải là người duy nhất nhận được lỗi này. Điều duy nhất tôi có thể nghĩ là chuyển dự án của mình sang một máy tính khác và thử lại. – Jen

+0

Bạn cũng đã tạo lại vân tay MD5 chưa? Trong trường hợp của tôi, MD5 đã thay đổi nên tôi phải lấy khóa API Maps mới. –

+0

Có, tôi đã tạo lại MD5 vân tay và vẫn còn lỗi tương tự. – Jen

2

Khóa bản đồ đã ký được sử dụng cho ứng dụng phát hành. Vì vậy, bạn sẽ nhận được thông tin như vậy. nếu bạn gỡ lỗi ứng dụng qua USB-tethered với khóa bản đồ đã ký. Quay lại để gỡ lỗi khóa bản đồ nếu bạn muốn gỡ lỗi ứng dụng và thay thế bằng khóa bản đồ đã ký trước khi bạn phát hành bản cập nhật hoặc phiên bản mới.

+0

có, khóa API đã ký được phát hành. với khóa này, mapview sẽ chỉ hiển thị khi bạn cài đặt từ thị trường. –

3

Cuối cùng Cố định của nó.

Tôi đang sử dụng máy Windows, vì vậy tôi chỉ cần truy cập C:\Users\rohit\.android và xóa debug.keystoredefault.keyset1 sau khi thực hiện xong, tôi đã đi đến Eclipse và áp dụng bản dựng sạch cho dự án của tôi và thực hiện!

+1

Đó không phải là cách thực hiện. Đó là một hack và không cần thiết. –

2

Tôi đã gặp vấn đề tương tự. Trong trường hợp của tôi, những gì tôi đã làm sai là điều này. Tôi đang viết lệnh keytool như thế này:

keytool -list -keystore debug.keystore ... 

thay vì:

keytool -list -keystore ~\.android\debug.keystore ... 

Vì vậy, tôi đã không được cập nhật keystore của Eclipse với dấu vân tay của tôi.

Tôi hy vọng điều này sẽ giúp ai đó :)

0

Tôi có cùng một câu hỏi nhưng tôi nghĩ rằng tôi đã tìm thấy câu trả lời!

  1. Quyết định làm theo các bước https://developers.google.com/android/maps-api-signup và nhận của chứng chỉ của bạn MD5 vân tay
  2. Trong khi phát triển, nếu bản đồ không thấy, không lo lắng về vấn đề này! chiết xuất đơn giản APK sử dụng công cụ Android với công cụ quan trọng mà được sử dụng trong bước đầu tiên và sử dụng tập tin APK này để cài đặt trên điện thoại của bạn, bạn sẽ thấy MapView

Dù sao, trong khi thời gian phát triển, có lẽ bạn không thấy MapView, nhưng nó cho đến khi không có vấn đề và không lo lắng về điều này! Chờ đợi đơn giản khi hoàn thành ứng dụng & xây dựng với kho khóa của bạn và bạn sẽ thấy hiển thị bản đồ chính xác

1

Nếu bạn đang sử dụng khóa gỡ lỗi mà ai đó đã tạo và cung cấp cho bạn, đó là lý do cho bản đồ trống có ngoại lệ sau .

java.io.IOException: Server returned: 3 

Bạn có thể sử dụng liên kết này để có được một khóa API: Register

+1

Chỉ dành cho v1 –

1

một điều nữa: Sau khi thêm -v bạn phải nhớ rằng google API chỉ cần MD5 không SHA1.So hãy kiểm tra những gì mã bạn cung cấp cho google.

+1

Sau đó, tại sao Google nói: Google xác minh rằng mỗi yêu cầu bắt nguồn từ ứng dụng Android khớp với một trong các dấu vân tay SHA1 và tên gói được liệt kê bên dưới. Bạn có thể khám phá dấu vân tay SHA1 của chứng chỉ nhà phát triển bằng cách sử dụng lệnh sau –

0

Đối với những linh hồn nghèo đã cố gắng xây dựng ví dụ bản đồ từ tính năng bổ sung sdk: ngay sau khi tôi đổi tên gói từ com.example.mapdemo thành com.mynmae.mapdemo, bản đồ xuất hiện một cách kỳ diệu. Có, tôi mất một giờ tìm kiếm và cố gắng và nó âm thầm từ chối tên gói.

Các vấn đề liên quan