4

私はAndroidクライアントアプリケーションでSpringFrameworkのRESTfulAPIを使い始めました。しかし、postForObject / postForEntityメソッドを介してHTTPリクエストを実行しようとすると、問題が発生しました。これが私のコードです:

public String _URL = "https://someservice/mobile/login";
public void  BeginAuthorization(View view)
{     
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
         HttpEntity<String> _entity = new HttpEntity<String>(requestHeaders);
        RestTemplate templ = new RestTemplate();
        templ.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        templ.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        ResponseEntity<String> _response = templ.postForEntity(_URL,_entity,String.class); //HERE APP CRASHES
        String _body = _response.getBody();

それで、私が間違っているのは何ですか?これを修正する方法は?それを行う他の方法はありますか?

本当に助けが必要です。前もって感謝します!

4

3 に答える 3

5

あなたはあなたのアプリAndroid4.0-4.2をターゲットにしていると思います。次に、メイン(UI)スレッドではなく、バックグラウンドですべての操作を実行する必要があります。私が見るように、あなたは承認プロセスを実行しています。これは短い操作なので、これを使用することをお勧めしますAsyncTask。androidDevelopersでこれを行う方法は次のとおりです。

http://developer.android.com/reference/android/os/AsyncTask.html

次のようにdoInBackground(Params ...)をオーバーライドする必要があります。

class LoginTask extends AsyncTask<String,Void,Void>
{
    @Override
    protected Void doInBackground(String... params) {
        HttpHeaders requestHeaders = new HttpHeaders();
        requestHeaders.setContentType(MediaType.APPLICATION_JSON); 
        HttpEntity<String> _entity = new HttpEntity<String>(requestHeaders);
        RestTemplate templ = new RestTemplate();
        templ.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
        templ.getMessageConverters().add(new MappingJacksonHttpMessageConverter());
        ResponseEntity<String> _response = templ.postForEntity(params[0],_entity,null) //null here in order there wasn't http converter errors because response type String and [text/html] for JSON are not compatible;
        String _body =  _response.getBody();
        return null;
    }
}

次に、BeginAuthorization(ビュービュー)で呼び出します。

new LoginTask().execute(URL);

PSまた、Javaを作成する場合は、正しい命名規則を使用してください。これの代わりに_response書いてくださいresponse

于 2012-12-17T18:26:44.637 に答える
2

ドキュメントから:

NetworkOnMainThreadException

アプリケーションがメインスレッドでネットワーク操作を実行しようとしたときにスローされる例外。

スレッドを作成し、そこからネットワーキングを行う必要があります。これはあなたが探しているものかもしれません。

于 2012-12-17T17:11:02.633 に答える
1

android>=4.0からのネットワーク呼び出しは非同期を経由する必要があります

于 2012-12-17T17:05:24.420 に答える