0

lat と lon と userID を渡して、sampleURL で REST Web サービスを呼び出そうとしています。しかし、私は常にnull文字列データを取得します。なぜそれが起こっているのですか?私はAndroidで働いています。しかし、ブラウザでその URL を開こうとすると、開かれて応答が表示されます。私のコードに何か問題があると思います。

private class GPSLocationListener implements LocationListener {
    @Override
    public void onLocationChanged(Location location) {
        if (location != null) {
            GeoPoint point = new GeoPoint(
                    (int) (location.getLatitude() * 1E6), 
                    (int) (location.getLongitude() * 1E6));

            String data = findUsersInCurrentRadius(1,location.getLatitude(),location.getLongitude());
            System.out.println("Got Data" +data);
            textView.setText(data);

}

private String findUsersInCurrentRadius(int userid, double lat, double lon) {

        String sampleURL = SERVICE_URL + "/"+REMOTE_METHOD_NAME+"/"+userid+"/"+lat+"/"+lon;
        System.out.println(sampleURL);

        HttpClient httpClient = new DefaultHttpClient();
        HttpContext localContext = new BasicHttpContext();
        HttpGet httpGet = new HttpGet(sampleURL);
        String text = null;
        try {
            HttpResponse response = httpClient.execute(httpGet, localContext);
            System.out.println("Some Response" +response);
            HttpEntity entity = response.getEntity();
            text = getASCIIContentFromEntity(entity);
        } catch (Exception e1) {
            return e1.getLocalizedMessage();
        }
        return text;
    }

}

4

1 に答える 1

1

メイン UI スレッドでネットワーク リクエストを実行しています。AsyncTask を使用してネットワーク リクエストを実行します。Android OS >= 3.0 では、メイン UI スレッドでネットワーク リクエストを実行できません。

あなたはAsyncTaskのように使うことができます

    private class NetworkRequest extends AsyncTask<String, Void, String> {
    int userid;
    double lat, lon;
    String reponse;

    public NetworkRequest(int userID, double lat, double lon) {
        this.userid = userID;
        this.lon = lon;
        this.lat = lot;
    }

    @Override
    protected String doInBackground(String... params) {
        reponse = findUsersInCurrentRadius(userid, lat, lon);
        return "Executed";
    }

    @Override
    protected void onPostExecute(String result) {
        if (null != reponse) {
            System.out.println("Got Data" + reponse);
            textView.setText(reponse);
        }
        else{
            //Handle the Error
        }
    }

}

そしてあなたのonLocationChanged電話でAsync Task

new NetworkRequest(userid,lat,lon).execute();
于 2012-08-13T03:12:51.633 に答える