尝试调用方法时强制关闭

Force close when try to Invoke method

我在尝试设置客户端时遇到问题,我收到消息: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 其工作完美

解决方案是将此代码放在 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 - 确保为您的 AndroidManifest.xml 文件添加互联网权限:

<uses-permission android:name="android.permission.INTERNET" />

注意:uses-permission 在应用程序标签之前。即:

<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 调试中看到响应。