如何从物理android客户端调用未发布的本地托管api?

时间:2017-06-29 20:35:57

标签: java android api django-rest-framework retrofit2

我正在使用django rest框架为我的android客户端应用程序编写后端api。 api,因为它仍在开发中,正在我的计算机上本地运行。 Android应用程序正在物理索尼xperia z上运行。我希望能够从物理设备调用api端点,尽管api在本地运行。

我尝试在基本api url中使用我的计算机的IPv4地址,如下所示:

这" http://127.XX.X.X:8000/"而不是这个" http://127.0.0.1:8000/"。

我尝试过使用过的局域网的IP地址:

这" http://192.XXX.X.XXX:8000/"而不是这个" http://127.0.0.1:8000/"。

其中没有一个调用api端点。

也许错误在于我的android客户端,在代码中负责向端点发出请求。

我使用改装api来调用android app后端api。

这是我的UserService界面:

public interface UserService {

    @POST("users/create/")
    Call<User> createUser(@Body User user);

    @POST("users/api-token-auth/")
    Call<String> loginInToken(@Body String email, @Body String password);

}

这是我的用户存储库,它使用此接口来调用api:

public class UserRepository implements UserRepositoryInterface {

    private UserService userServiceApi;

    public UserRepository() {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(BASE_API_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();

        userServiceApi = retrofit.create(UserService.class);
    }

    @Override
    public void createUser(User user) {
        Call<User> call = userServiceApi.createUser(user);
        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call, Response<User> response) {
                Log.d("USER_REPOSITORY", response.toString());

            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.d("USER_REPOSITORY", t.toString());
            }
        });
    }
}

我专注于让创建用户端点正常工作。但是,当我在我的物理设备上运行应用程序时,throwable会打印到onFailure界面方法的日志中,无论X地址的IP地址是USER_REPOSITORY: java.net.ConnectException: Failed to connect to /XXX.XX.X.X:8000

以防万一,这里是我在django-rest api的urls.py文件中调用的url,以显示我正在调用正确的URL:

url(r'^api-token-auth/', auth_views.obtain_auth_token),
url(r'create/$', user_views.UserCreate.as_view(), name="create"),

当api不在生产中时,必须有办法调用api端点。我做错了什么或我不做什么?

0 个答案:

没有答案