当我尝试设置客户端时出现问题,我在factory.build中收到消息:toString()失败。 方法抛出' java.lang.IllegalArgumentException'例外。当我调用
时,无法评估$ Proxy1.toString()ApiClientFactory factory = new ApiClientFactory();
factory.apiKey("xXxxXXXxxXXXXXXxxxxX");
final APIGatewayPediuClient client = factory.build(APIGatewayPediuClient.class); // exception happened in this line, proxy throw exepction
当我尝试调用方法时
Places place = client.placesGet();
强行关闭
com.amazonaws.http.UrlHttpClient.createHttpResponse(UrlHttpClient.java:72)
at com.amazonaws.http.UrlHttpClient.execute(UrlHttpClient.java:66)
at com.amazonaws.mobileconnectors.apigateway.ApiClientHandler.invoke(ApiClientHandler.java:91)
at java.lang.reflect.Proxy.invoke(Proxy.java:393)
at $Proxy1.placesGet(Unknown Source)
at net.devsoft.pediu.activity.HomeActivity$override.onCreate(HomeActivity.java:195)
at net.devsoft.pediu.activity.HomeActivity$override.access$dispatch(HomeActivity.java)`
SDK版本:
compile com.amazonaws:aws-android-sdk-core:2.2.6'
compile 'com.amazonaws:aws-android-sdk-cognito:2.2.6'
compile 'com.amazonaws:aws-android-sdk-apigateway-core:2.2.6'
compile 'com.google.code.gson:son:1.7.2
但已经尝试使用aws 2.2.15版并且仍然无法正常工作,SDK生成的Obj-C工作正常
答案 0 :(得分:0)
解决方案是将此代码放在AsyncTask中。
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ApiClientFactory factory = new ApiClientFactory();
factory.apiKey("xXXxXXXXXXXxxxxXXxxXXXXxxx");
final APIGatewayPediuClient client = factory.build(APIGatewayPediuClient.class);
Places place = client.placesGet();
return null;
}
}.execute();
答案 1 :(得分:0)
1-确保将Internet权限添加到您的AndroidManifest.xml文件:
<uses-permission android:name="android.permission.INTERNET" />
注意:uses-permit放在应用程序标记之前。即:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.awsapigatwway">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
2-确保在ASyncTask中执行API网关调用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
ApiClientFactory factory = new ApiClientFactory();
final PetStoreClient client = factory.build(PetStoreClient.class);
Pet pet = client.petsPetIdGet("1");
Log.d(pet.getType(), String.valueOf(pet.getPrice()));
return null;
}
}.execute();
}
在这种情况下,应该在Logcat Debug上看到响应。