gpt4 book ai didi

android - Robospice 配置服务器 URL

转载 作者:行者123 更新时间:2023-11-30 01:59:37 26 4
gpt4 key购买 nike

我正在使用 Robospice 来管理我的 API,我想在我的登录屏幕上实现一项功能,该功能允许更改将在我的应用程序中使用的服务器 URL。

在这个登录屏幕 Activity 中,我有不同的 editText 字段:用户名、登录名和 url(服务器)以及一个登录按钮。

我已经实现了 m Robospice 服务:

public class MyRetrofitService extends RetrofitGsonSpiceService {

public static final String BASE_URL = "https://myUrl.com";

public static final String PREF_FILE_NAME = "PrefFile";
public static final String PREF_USERNAME = "username";
public static final String PREF_PASSWORD = "password";
public static final String PREF_URL = "url";

@Override
public void onCreate() {
super.onCreate();
addRetrofitInterface(MyInterface.class);
}

@Override
protected String getServerUrl() {
// SharedPreferences return my current url saved by the user
String serverUrl = getApplicationContext().getSharedPreferences(PREF_FILE_NAME,Context.MODE_PRIVATE).getString("url",BASE_URL);

// I want to change this value
return serverUrl;
}
}

这是我的登录 Activity :

public class WelcomeActivity extends Activity {

public SpiceManager spiceManager = new SpiceManager(MyRetrofitService.class);

@Override
protected void onStart() {
super.onStart();
spiceManager.start(this);

}

@Override
protected void onStop() {
super.onStop();
spiceManager.shouldStop();
}

@Override
protected void onCreate(Bundle savedInstanceState){
// Initialise UI + sharedPreference
....
}

View.OnClickListener loginButtonListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
// get data from UI EditText
setUrl(urlAddress.getText().toString())
login(usersname.getText().toString(), password.getText().toString());
}
};

public void setURL(String url) {

// Save login details in sharedPreferences
Auxiliar.editor.putString(MyRetrofitService.PREF_URL, url);
Auxiliar.editor.putString(MyRetrofitService.PREF_USERNAME, usersname.getText().toString());
Auxiliar.editor.putString(MyRetrofitService.PREF_PASSWORD, password.getText().toString());
Auxiliar.editor.commit();

Intent myservice = new Intent(this, MyRetrofitService.class);
stopService(myservice);

spiceManager.shouldStop();
spiceManager = new SpiceManager(MyRetrofitService.class);
spiceManager.start(getBaseContext()); // at this point should trigger getServerURl() in my RobospiceService but it doesn't
}

private void login() {
LoginService loginRequest = new LoginService(username, password);
spiceManager.execute(loginRequest, new HTTPRequestListener());
}
}

所以我正在做的是停止我的 SpiceManager 服务并重新启动此服务以强制触发 MyRetrofitService 类中的此 getServerURL 方法并更改 url。

我检查了一下,这个服务真的停止了,然后又重新启动了,但它没有触发 getServerURl() 来更改这个 url。

我做错了什么吗?您是否有更改此 URL 并保存新 URL 的想法?

最佳答案

RetrofitSpiceService不是为满足这样的要求而设计的(有关详细信息,请参见代码)。

我建议覆盖 getRetrofitService() 方法并提供一个实现,该实现将为每个不同的服务器 URL 构建一个单独的 RestAdapter 或实现您自己的 RetrofitSpiceService 与现有实现类似,但可满足您的需求。

关于android - Robospice 配置服务器 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31697929/

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