0

我遇到了一个问题:我刚刚将以下代码从 NetBeans 复制到 Eclipse(一个 ADT 项目)。我已经导入了我在 NetBeans 中使用的所有相同的库,但我有 2 个错误,在以下几行中:

EntityUtils.consume(entity);- EntityUtils 类型的方法 consume(HttpEntity) 未定义

httpPut.releaseConnection();- HttpPut 类型的方法 releaseConnection() 未定义

完整代码:

import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.util.EntityUtils;
import com.android.lul.classes.User;

public class UserService {

    private static final String BASE_URI = "http://localhost:8080/LULServices/webresources";

    public static String Login (String login, String password, String ipAdd)
    {
        String toReturn = null;

        final DefaultHttpClient httpclient = new DefaultHttpClient();

        try {
                httpclient.getCredentialsProvider().setCredentials(
                    new AuthScope("localhost", 8080),
                    new UsernamePasswordCredentials("xxxx", "xxxx"));

        HttpPut httpPut = new HttpPut(BASE_URI + "/services.users/login");
        HttpConnectionParams.setConnectionTimeout(httpclient.getParams(), 10000);

        httpPut.addHeader("Content-type", "multipart/form-data");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("login", "login"));
        nameValuePairs.add(new BasicNameValuePair("password", "password"));

        httpPut.setEntity(new UrlEncodedFormEntity(nameValuePairs));

        HttpResponse response = httpclient.execute(httpPut);

        try {
                HttpEntity entity = response.getEntity();
                String putResponse = EntityUtils.toString(entity);
                toReturn = putResponse;
                EntityUtils.consume(entity);

            } finally {
                httpPut.releaseConnection();
            }

            } finally {
                httpclient.getConnectionManager().shutdown();

            return toReturn;
        } 

你能帮助我吗?

谢谢

4

3 回答 3

2

Android 带有预打包的 Apache HttpClient 版本,它没有这些方法。他们不再支持开发,并且该代码已过时。

Android 团队建议您对新代码使用HttpUrlConnection而不是 HttpClient。更多信息可以在Android 开发者网站上的这个博客中找到。

于 2013-03-26T15:32:14.210 回答
2

我认为您应该遵循一个更简单的示例,因为这似乎是为了上传文件(多部分/表单数据),但关于您的代码中的具体问题:

  1. 而不是EntityUtils.consume(entity);你可以做entity.consumeContent(); http://developer.android.com/reference/org/apache/http/HttpEntity.html

  2. HTTPRequest 类(HttpPost、HttpPut)没有任何releaseConnection()方法。可能是因为他们不需要被释放(如果我错了,请有人纠正我)。该方法通常适用于持久连接,但此处并非如此。

于 2014-02-13T09:34:34.097 回答
0

检查您的进口;您在新项目中使用的是什么版本的 Apache HttpComponents?

于 2013-03-26T15:30:35.250 回答