2013-07-31 38 views
6

Tôi đã làm theo hướng dẫn trong Creating an Endpoints Backend from an Android Project. Mọi thứ đều được biên dịch và trông đầy hứa hẹn. Phần cuối phụ trợ, tôi đã thay đổi CloudEndpointUtils # LOCAL_ANDROID_RUN thành 'true'. nhưng khi tôi cố gắng thử nghiệm ứng dụng trên thiết bị thực (không giả lập) im không bật -Máy ứng dụng của Google với Android - các điểm cuối thử nghiệm trên thiết bị thực

java.net.SocketException: không kết nối được với /10.0.2.2 (port 8888) sau 20000ms: isConnected failed: EHOSTUNREACH (Không đường để lưu trữ)

vì vậy, tôi nhìn CloudEndpointUtils và thấy rằng việc thiết LOCAL_ANDROID_RUN để 'true' làm cho giao diện ứng dụng cho DevAppServer trong http://10.0.2.2:8888, đó là giả lập bộ định tuyến ảo. nhưng không sử dụng trình mô phỏng. vì vậy tôi đã cố gắng thay đổi hằng số giữ url này thành http://127.0.0.1:8888/ nhưng vẫn không có may mắn. im bây giờ không về -

java.net.ConnectException: thất bại trong việc kết nối với /127.0.0.1 (port 8888) sau khi 20000ms: isConnected thất bại: ECONNREFUSED (kết nối từ chối)

tôi nghĩ nó có thể vì máy tính của tôi ở phía sau tường lửa nên tôi tắt nó, nhưng vẫn không có gì.

mọi đề xuất sẽ được đánh giá cao.

+0

vì thiết bị và máy chủ nằm trên cùng một mạng wifi, tôi đã thử một điều nữa là sử dụng ip của máy chủ trên mạng và hiện tại đang nhận - java.net.SocketTimeoutException: không kết nối được với /10.0 .0.1 (cổng 8888) sau 20000ms – AsafK

+1

thử thay đổi ip máy chủ thành 0.0.0.0 có nghĩa là nó sẽ chấp nhận từ bất kỳ đâu. Sau đó trỏ đến IP máy tính của bạn. – Faisal

+0

Tôi đã thêm đối số --address = * server_ip * vào cấu hình Chạy của máy chủ App Engine (trong Eclipse). bây giờ khi tôi mở 'http: // server_ip/8888' từ trình duyệt của thiết bị được kết nối, cuối cùng tôi thấy trang "Mẫu thiết bị đầu cuối Cloud Endpoints" nhưng ... cũng có lỗi "Không thể tìm nạp URL: http: //127.0. 0.1: 8888/_ah/spi/', có nghĩa là một nơi nào đó máy chủ vẫn trông trên localhost. tôi cũng gặp lỗi tương tự khi tôi gọi một trong những điểm cuối của mình từ ứng dụng. – AsafK

Trả lời

0

Thêm

--address="0.0.0.0" 

là công cụ ứng dụng tham số địa chỉ máy chủ để chấp nhận từ tất cả các kết nối đến.

+2

Bạn có thể giải thích thêm nơi này không? Giá trị của 'LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID' là gì? – user427969

7

Để thực hiện

  1. Đặt LOCAL_APP_ENGINE_SERVER_URL_FOR_ANDROID này = địa chỉ IP của bạn (đây là trong App Android của bạn)
  2. Nhấp chuột phải vào dự án App-Engine -> Run-> Run Configurations -> Web Application (trái bar) -> dự án công cụ ứng dụng của bạn.

2. (Contniued) Tới Arugments -> thêm chính xác như thế này

--address = 0.0.0.0 --port = .......

* để có được địa chỉ iP của bạn, hãy để cmd -> ipconfig -> thêm (địa chỉ IPV4 với số cổng) ở bước 1

lưu ý quan trọng: Vui lòng thay đổi mọi này trong trường hợp bạn đang truy cập internet từ dongle hoặc s ome dịch vụ internet IP động

Thankyou ... này hoạt động hoàn hảo

0

Thực hiện theo các bài 2. điểm bởi user248187 2. (Contniued) Tới Arugments -> thêm chính xác như thế này --address = 0,0. 0.0 --port = .......

Hiện tại, trên mã Android của máy khách, bạn cần thay đổi yêu cầu IP (RootURL) của dịch vụ thành IP cục bộ.Bạn có thể làm điều đó bằng cách sử dụng builder.setRootUrl(). Nó là tốt mà bạn thêm một căn hộ cho outomatice nó trên bạn android khách hàng, sau đó nó có thể chuyển đổi giữa các địa phương và triển khai ứng dụng-engiene một cách nhanh chóng. Chẳng hạn như:

//........................ 

private boolean mFlatLocalHostServer=true; 
private static final String LOCAL_IP = "192.168.1.11"; //Ip debug server 
public static final String LOCAL_SERVER_IP = "http://"+LOCAL_IP+":8888/_ah/api"; 
//...................... 
Mydataendpoint.Builder builder = new Mydataendpoint.Builder(
           AndroidHttp.newCompatibleTransport(), 
           new GsonFactory(), 
             mCredential); 

//request the service to local ip 
if(mFlatLocalHostServer){ 
     builder.setRootUrl(LOCAL_SERVER_IP); 
} 

Mydataendpoint service = builder.build(); 
response=service.insertMyData(mydata).execute(); 
1

Khi thử nghiệm cục bộ Google cloud thiết bị đầu cuối từ địa chỉ không địa chỉ máy chủ địa chỉ --address = "0.0.0.0" có thể không đủ.

Điểm cuối của tôi đã cung cấp lỗi 404 Not Found khi truy cập từ máy chủ không cục bộ. Tôi đã giải quyết vấn đề này bằng cách bao gồm thông số đường dẫn trong API decoration.

chú thích API của tôi trông như thế này:

@ApiMethod(name="saveResponse", httpMethod = "post", path="saveResponse) 
public Response saveResponse(@Named("answerString") String responseString) 
12

Nếu bạn muốn làm điều này trong Android Studio, thiết httpAddress như sau trong build.gradle bạn

appengine { 

    ... 

    httpAddress = "0.0.0.0" 
} 
+0

Rất đẹp. Tôi đã dành rất nhiều thời gian để tìm câu trả lời cho điều này. – Yale

-2

Địa chỉ 10.0.2.2 là để truy cập localhost bằng trình mô phỏng, để truy cập localhost bằng thiết bị thực, sử dụng các bước sau

-ở c ommandline (cmd) chạy ipconfig. -Nhận ipaddress của máy tính của bạn và thay thế 10.0.2.2 với nó, -Xây dựng và chạy trên thiết bị của bạn.

Hy vọng điều này sẽ giúp người

5

Có rất nhiều câu trả lời ở đây nhưng tôi đã tìm thấy chúng lộn xộn hoặc uncomplete. Để chạy các máy chủ cục bộ trên máy tính của bạn và thử nghiệm nó với một thực thiết bị làm điều này:

1) Thêm httpAddress = "0.0.0.0" vào khối appengine trong tập tin build.gradle bạn của backend (Google Cloud Endpoint) mô-đun, như thế này:

appengine { 
    ... 
    httpAddress = "0.0.0.0" 
} 

Theo nhận xét về câu hỏi, điều này có nghĩa là 'sẽ chấp nhận từ mọi nơi'.

2) Chạy mô-đun phụ trợ của bạn cục bộ (ví dụ: khởi động máy chủ web). Điều này là tầm thường: chọn cấu hình phụ trợ trên menu thả xuống và nhấn nút màu xanh lá cây. Bạn có thể find more detailed instructions here.

Bây giờ, bạn có thể mở trình duyệt (trên máy tính của mình) và điều hướng đến http://localhost:8080/ và xem trang web có 'Xin chào, Điểm cuối!' và nhiều thứ khác.

3) Tìm địa chỉ IP của máy tính (trên máy Mac vào System Preferences -> Network) và sau đó đặt nó như là url gốc trong mã ứng dụng Android của bạn, như thế này:

MyApi.Builder builder = new MyApi.Builder(
          AndroidHttp.newCompatibleTransport(), 
          new AndroidJsonFactory(), 
          null 
).setRootUrl("http://192.168.1.36:8080/_ah/api/") 

Đó là tất cả!

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