0

私はJerseyによって実装されたRestful Web Serviceを持っています。Android から HTTP クライアント経由で接続してデータをフェッチします。API レベル 10 以前のバージョンでは問題なく動作しますが、API レベル 11 以降では動作しません。助けてくれてありがとう。これらのバージョンには nullPointerException があります。

public String getBaseURI(String str) {
        String result = "";
        try {
            HttpParams httpParameters = new BasicHttpParams();
            int timeoutConnection = 3000;
            HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
            int timeoutSocket = 5000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters);
            HttpGet getRequest = new HttpGet(ServerAddress + str);
            getRequest.addHeader("accept", "application/json");
            HttpResponse response = httpClient.execute(getRequest);
            result = getResult(response).toString();
            httpClient.getConnectionManager().shutdown();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        } 
        return result;
    }

private StringBuilder getResult(HttpResponse response) throws IllegalStateException, IOException {
        if (response.getStatusLine().getStatusCode() != 201) 
            throw new RuntimeException("Failed : HTTP error code : " + response.getStatusLine().getStatusCode());
        StringBuilder result = new StringBuilder();
        BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())), 1024);
        String output;
        while ((output = br.readLine()) != null) 
            result.append(output);
        return result;      
    }

タグ : AndroidRuntime

logcat 例外:

Exception: FATAL EXCEPTION: main
java.lang.NullPointerException
at com.android.internal.os.LoggingPrintStream.Prrintln(LogiingPrintStream.java.298)
at Client.getBaseURI (Client.java:66)

次のような残りのサービスを呼び出すとき: String str = client.getBaseURI("task/project/get/" + user); エラー
が発生します。

private void listViewSet() {

        ListView lv = (ListView) this.findViewById(R.id.listView);
        lv.setAdapter(new MultiAdapter(this));

        lv.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view, int pos, long id) {

                switch (pos) {
            case ADD:
            String str = client.getBaseURI("task/project/get/" + user);// Json format
                        ......
                }
            }
        });
    }
4

1 に答える 1

0

別のスレッドでHTTPリクエストを実行していますか(AsyncTaskたとえば、を使用して)?

一部の新しいAPI(特に、私の経験ではICS)では、UIスレッドをブロックしないように、別のスレッドでネットワーク接続を実行する必要があります。ネットワーク接続は潜在的に長くて費用がかかる可能性があるため、UIスレッドで実行する必要はありません。これを行うと、UIが画面に描画されなくなったり、アプリケーションが強制的に閉じられたり、アプリケーションがユーザーに遅れて表示されたりする可能性があります。

于 2012-06-05T20:56:25.827 に答える