RoboSpice を使用して、サーバーからの JSON 回答を受信して処理しています。私は RoboSpice チュートリアルのようにすべて作成しました: AndroidManifest.xml にサービス (NetworkSpiceService) を追加し、必要なライブラリを追加し、特別な応答オブジェクトを実装しました - SimpleResponse with @JsonIgnoreProperties(ignoreUnknown = true)。
基本アクティビティ:
public abstract class BaseActivity extends Activity {
private SpiceManager spiceManager = new SpiceManager(NetworkSpiceService.class);
@Override
protected void onStart() {
spiceManager.start(this);
super.onStart();
}
@Override
protected void onStop() {
spiceManager.shouldStop();
super.onStop();
}
public SpiceManager getSpiceManager() {
return spiceManager;
}
}
私の仕事の活動:
public class MainActivity extends BaseActivity implements OnClickListener{
private static final String JSON_CACHE_KEY = "some_json";
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// ...
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private void load() {
getSpiceManager().execute(NetworkManager.getJson(param), JSON_CACHE_KEY, DurationInMillis.ALWAYS_EXPIRED, new JsonRequestListener());
}
private class JsonRequestListener implements RequestListener<SimpleResponse> {
@Override
public void onRequestFailure(SpiceException spiceException) {
Log.e("Json", "failure: " + spiceException.getMessage());
}
@Override
public void onRequestSuccess(SimpleResponse simpleResponse) {
Log.i("Json", "response");
Log.i("Json", "response received. offset = " + simpleResponse.getOffset() + " timezone = " + simpleResponse.getTimeZone());
}
}
NetworkManager クラス:
public class NetworkManager {
private static final String API_KEY = ".....";
private static final String GET_SOME_URL = "https://api.servername.com/" + API_KEY + "/";
public static GetRequest<SimpleResponse> getJson(double param) {
return new GetRequest<SimpleResponse>(SimpleResponse.class, GET_SOME_URL + param);
}
}
そして GetRequest:
public class GetRequest<T extends SimpleRequest> extends
SpringAndroidSpiceRequest<T> {
private Class<T> clazz;
private String url;
public GetRequest(Class<T> clazz, String url) {
super(clazz);
this.clazz = clazz;
this.url = url;
}
@Override
public T loadDataFromNetwork() throws Exception {
return getRestTemplate().getForObject(url, clazz);
}
したがって、 load() の呼び出し後、 OnRequestFailure(...) または onRequestSuccess(...) を起動することが期待されますが、何も発生しません。loadDataFromNetwork が呼び出していると確信しました。ブラウザではそのアドレスの応答を受け取りますが、アプリでは受け取りません。
どうしたの?私は何かを忘れているのでしょうか?それとも、https リクエストを他の方法で処理する必要があるのでしょうか?