Robospice 配置服务器 URL
Robospice configure server URL
我正在使用 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 class 中的此 getServerURL 方法并更改 url。
我检查了一下,这个服务真的停止了,然后又重新启动了,但它没有触发 getServerURl() 来改变这个 url。
我做错了什么吗?您是否有想法更改此 URL 并保存新的?
RetrofitSpiceService
不是为满足这样的要求而设计的(有关详细信息,请参阅代码)。
我建议覆盖 getRetrofitService()
方法并提供一个实现,该实现将为每个不同的服务器 URL 构建一个单独的 RestAdapter
或实现您自己的 RetrofitSpiceService
与现有实施类似,但可满足您的需求。
我正在使用 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 class 中的此 getServerURL 方法并更改 url。
我检查了一下,这个服务真的停止了,然后又重新启动了,但它没有触发 getServerURl() 来改变这个 url。
我做错了什么吗?您是否有想法更改此 URL 并保存新的?
RetrofitSpiceService
不是为满足这样的要求而设计的(有关详细信息,请参阅代码)。
我建议覆盖 getRetrofitService()
方法并提供一个实现,该实现将为每个不同的服务器 URL 构建一个单独的 RestAdapter
或实现您自己的 RetrofitSpiceService
与现有实施类似,但可满足您的需求。