gpt4 book ai didi

java - 如何使用 Android 设备从 localhost (Mac) 中的服务访问 api

转载 作者:太空宇宙 更新时间:2023-11-04 09:02:15 24 4
gpt4 key购买 nike

我正在构建一个 Android 应用程序,它使用我在设备(本地主机)上运行的 Spring Boot 后端的 REST api。 Android 应用程序为此目的使用了改造。

但我无法使用我的 Android 设备或模拟器来访问任何 api。

我已经尝试了许多不同论坛中提供的大部分答案,但仍然找不到任何答案。

到目前为止我已经尝试过的;

在模拟器上运行

将基本 URL 更改为 10.0.2.2:portNo- 没有响应

更改模拟器设置> 代理以获取网络的 IP 地址 - 在 springbok 后端服务中给出以下内容 - source

Request received for GET '/gen_204':

org.apache.catalina.connector.RequestFacade@19ebbc48

servletPath:/gen_204
pathInfo:null
headers:
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36
host: www.google.com
connection: Keep-Alive
accept-encoding: gzip


Security filter chain: [
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
LogoutFilter
JWTAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]


************************************************************


2020-03-12 15:45:21.473 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2020-03-12 15:45:21.474 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2020-03-12 15:45:21.474 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-03-12 15:45:21.475 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 4 of 12 in additional filter chain; firing Filter: 'CorsFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 5 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 6 of 12 in additional filter chain; firing Filter: 'JWTAuthenticationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 7 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 8 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2020-03-12 15:45:21.477 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /gen_204 at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2020-03-12 15:45:21.477 INFO 36507 --- [nio-8080-exec-7] l.a.e.o.A.JwtAuthenticationEntryPoint : Unauthorized error. Message - Full authentication is required to access this resource
2020-03-12 15:45:21.478 INFO 36507 --- [nio-8080-exec-7] Spring Security Debugger :

************************************************************

Request received for GET '/error':

org.apache.catalina.core.ApplicationHttpRequest@78d558cf

servletPath:/error
pathInfo:null
headers:
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36
host: www.google.com
connection: Keep-Alive
accept-encoding: gzip


Security filter chain: [
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CorsFilter
LogoutFilter
JWTAuthenticationFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
]


************************************************************


2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 4 of 12 in additional filter chain; firing Filter: 'CorsFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 5 of 12 in additional filter chain; firing Filter: 'LogoutFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 6 of 12 in additional filter chain; firing Filter: 'JWTAuthenticationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 7 of 12 in additional filter chain; firing Filter: 'RequestCacheAwareFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 8 of 12 in additional filter chain; firing Filter: 'SecurityContextHolderAwareRequestFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 9 of 12 in additional filter chain; firing Filter: 'AnonymousAuthenticationFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 10 of 12 in additional filter chain; firing Filter: 'SessionManagementFilter'
2020-03-12 15:45:21.478 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 11 of 12 in additional filter chain; firing Filter: 'ExceptionTranslationFilter'
2020-03-12 15:45:21.480 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error at position 12 of 12 in additional filter chain; firing Filter: 'FilterSecurityInterceptor'
2020-03-12 15:45:21.480 DEBUG 36507 --- [nio-8080-exec-7] o.s.security.web.FilterChainProxy : /error reached end of additional filter chain; proceeding with original chain

Google 使用“/gen_204”来检查设备是否在线,在本例中失败。

与设备连接

尝试为两台设备使用相同的 WiFi 网络和热点,但没有成功。

与改造相关的代码使用;

public interface AuthApis {

@POST("login")
Call<LoginRequest> signInUser(@Body LoginRequest loginRequest);

@POST("register")
Call<UserDTO> registerUser(@Body UserDTO dto);

}
public class RegistrationActivity extends AppCompatActivity {
private EditText name_et;
private EditText email_et;
private EditText password_et;
private EditText confirmpass_et;

private AuthApis authApis;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);

getSupportActionBar().setTitle("Registration");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

this.name_et=findViewById(R.id.unameET);
this.email_et=findViewById(R.id.emailET);
this.password_et=findViewById(R.id.passET);
this.confirmpass_et=findViewById(R.id.confirmPassET);

Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://localhost:8080/auth/")
.addConverterFactory(GsonConverterFactory.create())
.build();

authApis=retrofit.create(AuthApis.class);
}

public void signupBtn_onClick(View view) {
String name = name_et.getText().toString();
String email = email_et.getText().toString();
String password = password_et.getText().toString();
String confirm_password = confirmpass_et.getText().toString();

UserDTO dto=new UserDTO();
dto.setUserName(name);
dto.setEmail(email);
dto.setPassword(password);
dto.setConfirmPassword(confirm_password);

Call<UserDTO> userDTOCall=authApis.registerUser(dto);

userDTOCall.enqueue(new Callback<UserDTO>() {
@Override
public void onResponse(Call<UserDTO> call, Response<UserDTO> response) {
if(!response.isSuccessful()){
System.out.println(response.code());
}

System.out.println(response.body());
}

@Override
public void onFailure(Call<UserDTO> call, Throwable t) {

}
});

}
}

上面的代码,调试时,会在call.enqueue方法后停止

我想知道可能出了什么问题。如有任何帮助,我们将不胜感激。

最佳答案

关闭防火墙后我能够让模拟器正常工作。但如果你不想关闭防火墙,这个答案也很好https://stackoverflow.com/a/56769746/10598769 ,这将授予对 10.0.2.2 的网络访问权限

并将基本 URL 更改为 IP 10.0.2.2

Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://10.0.2.2:8080/auth/")
.addConverterFactory(GsonConverterFactory.create())
.build();

并确保在模拟器设置中选中“使用 Android Studio HTTP 代理设置”。

关于java - 如何使用 Android 设备从 localhost (Mac) 中的服务访问 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60653471/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com