我目前正在編寫一個連接到服務器以發出POST請求的應用程序。出於這個原因,我爲各種網絡操作創建了多個Retrofit界面。我有一個執行註冊:我採取用戶名,電子郵件等,做一個POST請求,然後作爲最後一個參數,我有一個回調(RegistrationResult是一個POJO接受「成功」或「失敗」類變量) 。它的界面看起來是這樣的:Retrofit.Callback的成功()和失敗()在同一活動中的兩個接口實現的情況下
public interface RegistrationInterface {
@FormUrlEncoded
@POST("/api/apiregistration.php")
void connect(@Field("country") String country,
@Field("state") String state, @Field("email") String email,
@Field("pwd") String password,
Callback<RegistrationResult> resp);
}
現在,因爲我要使用GCM推送通知,我有發送特定設備的註冊ID服務器,並再次另一個界面,得到響應背部。該界面如下所示:
public interface SendRegIDInterface {
@FormUrlEncoded
@POST("/api/apiregid.php")
void connect(@Field("reg_id") String reg_id,
Callback<RegIDResult> resp);
}
到目前爲止,這麼好。當我嘗試在同一個類中創建兩個接口的實現時,問題就出現了。假設我有一個Activity,出於某種原因,應該使用兩個接口的實現。所以我有這樣的:
public class MessageActivity extends Activity implements Callback {
public void onCreate(Bundle firebug) {
RestAdapter restAdapter1 = new RestAdapter.Builder().setEndpoint(endpoint).build();
RegistrationInterface regInter = restAdapter1.create(RegistrationInterface.class);
regInter.connect(// parameters here, MessageActivity.this);
RestAdapter restAdapter2 = new RestAdapter.Builder().setEndpoint(endpoint).build();
SendRegIDInterface regIDInter = restAdapter2.create(SendRegIDInterface.class);
regIDInter.connect(reg_id, MessageActivity.this);
}
@Override
public void failure(RetrofitError arg0) {
}
@Override
public void success(Object arg0, Response arg1) {
}
}
我的問題是這樣的:你在哪裏的Retrofit.Callback接口的重載方法(成功與失敗)對應?由於我在同一個Activity中有兩個Retrofit接口實現,我怎麼能區分返回的內容,例如。 success()方法?它是來自RegistrationInterface實現的響應還是來自Callback的success()方法參數中包含的SendRegIDInterface的響應?只要我在Activity中只有一個RegistrationInterface接口的實現,一切都很清楚:success()方法的參數包含服務器對註冊請求的響應。現在我正在使用第二個接口實現(SendRegIDInterface),我非常困惑!
或者我完全錯了嗎?
檢查這個應答解耦請求和回調。 http://stackoverflow.com/a/31219041/560040 – Laranjeiro 2015-07-04 09:29:32