在我的 doInBackground 中获取 IllegalArgumentException

Getting IllegalArgumentException in my doInBackground

我在 android 中做了一个演示,我正在向 API 发出一个 http 请求。我已经制作了一个用于发出 http 请求的异步任务。当我向 API 发出请求时,应用程序崩溃了,在 logcat 中它在我的请求中显示 "illegalargumentException"。我不明白为什么会这样。

**reqUrl = "http://dev.api.ean.com/ean-services/rs/hotel/v3/itin?_type=json&cid=55505&minorRev=99&apiKey=gs28w3m7nqd8y4gsa4x5qsfs&locale="
                        + Consts.Locale
                        + "&currencyCode="
                        + Consts.currencyCode
                        + "&xml=<HotelItineraryRequest><itineraryId>"
                        + itrny
                        + "</itineraryId><email>"
                        + mail
                        + "</email></HotelItineraryRequest>";**

异步任务

class RequestTask extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... uri) {
            HttpClient httpclient = new DefaultHttpClient();
            HttpResponse response;

            try {
                response = httpclient.execute(new HttpGet(uri[0]));
                StatusLine statusLine = response.getStatusLine();
                if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                    ByteArrayOutputStream out = new ByteArrayOutputStream();
                    response.getEntity().writeTo(out);
                    responseString = out.toString();

                    out.close();
                } else {
                    // Closes the connection.
                    response.getEntity().getContent().close();
                    throw new IOException(statusLine.getReasonPhrase());
                }
            } catch (ClientProtocolException e) {
                // TODO Handle problems..
            } catch (IOException e) {
                // TODO Handle problems..
            }
            return responseString;
        }

        @Override
        protected void onPostExecute(String result) {
            super.onPostExecute(result);
            System.out
                    .println("::::::::::::::::::MY ITERNARY RESAPONSE::::::::::::::"
                            + responseString);
            // Do anything with response..
        }
    }

我在这一行收到非法参数:

response = httpclient.execute(new HttpGet(uri[0]));

看起来你没有正确执行你的 AsyncTask (RequestTask)(顺便说一句,你忘了包括你使用它的方式)

使用您当前的代码,您应该像这样调用它 new RequestTask().execute(myUrlString);

备用解决方案

如果您这样做并且由于某些奇怪的原因它不起作用,并且由于您正在使用 RequestTask 扩展 AsyncTask,您可以确保 100% 传递 URI通过向您的 class 添加一个构造函数来接收您要使用的 URL,这些是:

private final String uri;

public RequestTask(String uri) {
  this.uri = uri;
}

然后在您的 doInBackground 方法中,执行:

response = httpclient.execute(new HttpGet(this.uri));

这肯定有效...但请注意您如何开始 RequestTask