1

私はMavenとSpringResttemplateを使用してAndroidアプリケーションを開発しています。

これは私のpom.xmlです

<properties>
    <platform.version> 2.3.3</platform.version>
    <spring.version>1.0.0.RELEASE</spring.version>
    <simple-version>2.4.1</simple-version>
</properties>

<dependencies>

    <!-- Spring Android Core -->
    <dependency>
        <groupId>org.springframework.android</groupId>
        <artifactId>spring-android-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Spring Rest Android -->
    <dependency>
        <groupId>org.springframework.android</groupId>
        <artifactId>spring-android-rest-template</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- Using Jackson for JSON marshaling -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.7.1</version>
    </dependency>

    <!-- Using Simple for XML marshaling -->
    <dependency>
        <groupId>org.simpleframework</groupId>
        <artifactId>simple-xml</artifactId>
        <version>${simple-version}</version>
        <exclusions>
            <exclusion>
                <artifactId>stax</artifactId>
                <groupId>stax</groupId>
            </exclusion>
            <exclusion>
                <artifactId>stax-api</artifactId>
                <groupId>stax</groupId>
            </exclusion>
        </exclusions>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>com.jayway.maven.plugins.android.generation2</groupId>
            <artifactId>android-maven-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile>
                <assetsDirectory>${project.basedir}/assets</assetsDirectory>
                <resourceDirectory>${project.basedir}/res</resourceDirectory>
                <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory>
                <sdk>
                    <platform>10</platform>
                </sdk>
                <emulator>
                    <avd>10</avd>
                </emulator>
                <deleteConflictingFiles>true</deleteConflictingFiles>
                <undeployBeforeDeploy>true</undeployBeforeDeploy>
            </configuration>
            <extensions>true</extensions>
        </plugin>

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>

メインアクティビティでは、このコードをボタンに入れています:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    btnLogin = (Button) findViewById(R.id.btnLogin);

    btnLogin.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {

            String email = "user@xxxx.com";
            String passwd = "123456";

            restTemplate = new RestTemplate();

            try {
                Users user = restTemplate.getForObject(URL + "/{email}/{password}",
                                Users.class, email, passwd);

                if (user != null) {
                    System.out.println("Mi nombre es: " + user);
                }

            } catch (ResourceAccessException ex) {
                System.out.println("OFF");
            } catch (RestClientException ex) {
                System.out.println("Error");
            }
        }
    });

アプリケーションをデバイスに実行すると、これはlogCatに表示されるエラーです。

java.lang-IllegalArgumentException: 'messageConverters' must not be empty

ありがとう!!!!

4

3 に答える 3

5

メッセージコンバータを設定する

RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
Users user = restTemplate.getForObject(URL + "/{email}/{password}",
                            Users.class, email, passwd);

詳細については、SpringforAndroidリファレンスマニュアルの2.7.3 Retrieving JSON data via HTTP GETセクションをご覧ください。

そしてここに良い例があります。

于 2012-10-10T12:57:03.017 に答える
2

応答をユーザーインスタンスに解析できるように、メッセージコンバーターを設定する必要があります。使用しているサーバーからの応答タイプに応じて、さまざまなコンバーターを提供する必要があります。たとえば、使用できるJSONを解析する必要がある場合などです。

restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

事前定義されたコンバーターのいくつかを使用する場合、プロジェクトにいくつかの追加のライブラリーを含める必要があるかもしれません(この例では、Jacksonライブラリーが必要です)。

于 2012-09-26T12:19:18.847 に答える
1

try/catchとinsideメソッドを使用して解決策を見つけました。

public Users obtainUser() {
    try {

        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setAccept(Collections.singletonList(new MediaType("application","json")));
        HttpEntity<?> requestEntity = new HttpEntity<Object>(requestHeaders);

        RestTemplate restTemplate = new RestTemplate();

        restTemplate.getMessageConverters().add(new MappingJacksonHttpMessageConverter());

        ResponseEntity<Users> responseEntity = restTemplate.exchange(URL, HttpMethod.GET, requestEntity, Users.class);
        Users users = responseEntity.getBody();

        return users;


    } catch (Exception e) {
        System.out.println("Error: " + e);
        return null;
    }
}

アンドロイドクラスAsyncTaskも使用

于 2012-10-30T19:05:09.473 に答える