5
HttpURLConnection con = null;
        Response response = new Response();
        String TAG = "HttpConHandler";

        try{
            /*
             * IMPORTANT: 
             * User SHOULD provide URL Encoded Parms
             */
            Log.p(TAG, "URL="+ urlStr);
            String q=httpHeaders.get("Authorization");

            URL url = new URL(urlStr);
            con = (HttpURLConnection) url.openConnection(); 

            con.setRequestProperty("Authorization", q);
            con.setRequestProperty("GData-Version", "3.0");

嗨,我在调用方法时遇到java.lang.IllegalStateException: Cannot set method after connection is made错误setRequestProperty,但是当我在连接之前调用此方法时,我得到了NullPointerException,因为con它是空的。我能做些什么来解决这个问题?

4

3 回答 3

1

请检查来自 Google 的 URL:http: //developer.android.com/reference/java/net/HttpURLConnection.html

openConnection()在设置标题之前使用该方法是可以的。以下是文档中的步骤:

  1. 通过调用 URL.openConnection() 并将结果转换为 HttpURLConnection 来获取新的 HttpURLConnection。
  2. 准备请求。请求的主要属性是它的 URI。请求标头还可能包括元数据,例如凭据、首选内容类型和会话 cookie。
  3. (可选)上传请求正文。setDoOutput(true)如果实例包含请求正文,则必须配置实例。通过写入返回的流来传输数据getOutputStream()
  4. 阅读回复。响应标头通常包括元数据,例如响应正文的内容类型和长度、修改日期和会话 cookie。可以从返回的流中读取响应正文getInputStream()。如果响应没有正文,则该方法返回一个空流。
  5. 断开。读取响应正文后,HttpURLConnection应通过调用关闭disconnect(). 断开连接会释放连接持有的资源,以便它们可以关闭或重用。

但是,如果问题仍然存在,您可以尝试调试代码并检查 connection.connected 私有标志以查看它在哪里变为真的;调用该方法后,我遇到了类似的问题getContentType()

否则,您可以切换到 HttpClient API:

  HttpClient httpclient = new DefaultHttpClient();

    // Prepare a request object
    HttpGet httpget = new HttpGet(url); 

    // Execute the request
    HttpResponse response;
    try {
        response = httpclient.execute(httpget);
....
于 2013-04-22T15:28:31.957 回答
0

不要使用 URL 的便捷方法,要么使用HttpURLConnection或其他库。

于 2011-10-11T12:53:33.290 回答
0

这可能有效:

URL url = new URL(urlStr);
con = (HttpURLConnection) url.openConnection(); 
con.setDoOutput(true);
con.setRequestProperty("Authorization", q);
con.setRequestProperty("GData-Version", "3.0");
于 2011-10-11T12:57:41.087 回答