Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android上使用HttpPost时出错_Android_Http Post - Fatal编程技术网

在Android上使用HttpPost时出错

在Android上使用HttpPost时出错,android,http-post,Android,Http Post,我正在尝试将安卓系统的文本输入到网站中,我了解到httppost是一个不错的选择。我下载了HttpClient 4.2.2(GA)tar.gz,解压缩它们,并将7个jar复制到Eclipse中android项目的lib文件夹中。我很确定我得到了所有的罐子,因为它们与网站上列出的那些相匹配 然后,我继续从以下位置复制并粘贴顶部教程: 我导入了所有内容,但留下了以下错误: EntityUtils.consume(entity1); //X } finally { htt

我正在尝试将安卓系统的文本输入到网站中,我了解到httppost是一个不错的选择。我下载了HttpClient 4.2.2(GA)tar.gz,解压缩它们,并将7个jar复制到Eclipse中android项目的lib文件夹中。我很确定我得到了所有的罐子,因为它们与网站上列出的那些相匹配

然后,我继续从以下位置复制并粘贴顶部教程:

我导入了所有内容,但留下了以下错误:

   EntityUtils.consume(entity1);  //X
    } finally {
       httpGet.releaseConnection();  //X
这部分代码在教程中有两处,两处都会出现错误。 Eclipse对第一行说:

“类型EntityUtils的方法consume(HttpEntity)未定义。”

第二行:

“HttpGet类型的方法releaseConnection()未定义。”

我很确定我下载了每个罐子,正确地运输了它们,并且导入了所有的东西。是什么造成了这个错误?谢谢

    package com.example.myapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class BalanceCheckerActivity extends Activity {

private final String LOGIN_URL = "https://someloginsite.com"; //username and password

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_balance_checker);

        String username = getIntent().getExtras().getString("username");
        String password = getIntent().getExtras().getString("password");

        //Building post parameters, key and value pair
        List<NameValuePair> accountInfo = new ArrayList<NameValuePair>(2);
        accountInfo.add(new BasicNameValuePair("inputEnterpriseId", username));
        accountInfo.add(new BasicNameValuePair("password", password));

        //Creating HTTP client
        HttpClient httpClient = new DefaultHttpClient();

        //Creating HTTP Post
        HttpPost httpPost = new HttpPost(LOGIN_URL);

        BasicHttpParams params = new BasicHttpParams();
        params.setParameter("inputEnterpriseID", username);
        params.setParameter("password", password);
        httpPost.setParams(params);

        //Url Encoding the POST parameters
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(accountInfo));
        }
        catch (UnsupportedEncodingException e) {
            // writing error to Log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));
        }

        HttpResponse response = null;
        InputStreamReader iSR = null;
        String source = null;

     // Making HTTP Request
        try {
            response = httpClient.execute(httpPost);

            // writing response to log
            Log.d("Http Response:", response.toString());

            iSR = new InputStreamReader(response.getEntity().getContent());

            BufferedReader br = new BufferedReader(iSR);   
            source = "";

            while((source = br.readLine()) != null)
            {
                source += br.readLine();
            }

        } catch (ClientProtocolException e) {
            // writing exception to log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));

        } catch (IOException e) {
            // writing exception to log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));
        }
        System.out.println(source);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_balance_checker, menu);
        return true;
    }
    }
这是我现在拥有的。Edward,我使用了你方法中的一些代码,但只是把它们放到了onCreate中。然而,这是行不通的。从上一个活动转到本活动几秒钟后,我收到一条消息,应用程序“意外停止”

我有一个关于将字符串输入到网站文本字段的问题:我是否使用HttpParams的NameValuePairs?这是我的密码,你能看出来是怎么回事吗?谢谢

    package com.example.myapp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.params.HttpClientParams;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.widget.Toast;

public class BalanceCheckerActivity extends Activity {

private final String LOGIN_URL = "https://someloginsite.com"; //username and password

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_balance_checker);

        String username = getIntent().getExtras().getString("username");
        String password = getIntent().getExtras().getString("password");

        //Building post parameters, key and value pair
        List<NameValuePair> accountInfo = new ArrayList<NameValuePair>(2);
        accountInfo.add(new BasicNameValuePair("inputEnterpriseId", username));
        accountInfo.add(new BasicNameValuePair("password", password));

        //Creating HTTP client
        HttpClient httpClient = new DefaultHttpClient();

        //Creating HTTP Post
        HttpPost httpPost = new HttpPost(LOGIN_URL);

        BasicHttpParams params = new BasicHttpParams();
        params.setParameter("inputEnterpriseID", username);
        params.setParameter("password", password);
        httpPost.setParams(params);

        //Url Encoding the POST parameters
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(accountInfo));
        }
        catch (UnsupportedEncodingException e) {
            // writing error to Log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));
        }

        HttpResponse response = null;
        InputStreamReader iSR = null;
        String source = null;

     // Making HTTP Request
        try {
            response = httpClient.execute(httpPost);

            // writing response to log
            Log.d("Http Response:", response.toString());

            iSR = new InputStreamReader(response.getEntity().getContent());

            BufferedReader br = new BufferedReader(iSR);   
            source = "";

            while((source = br.readLine()) != null)
            {
                source += br.readLine();
            }

        } catch (ClientProtocolException e) {
            // writing exception to log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));

        } catch (IOException e) {
            // writing exception to log
            e.printStackTrace();
            startActivity(new Intent(this, AccountInputActivity.class));
        }
        System.out.println(source);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_balance_checker, menu);
        return true;
    }
    }
package com.example.myapp;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.UnsupportedEncodingException;
导入java.net.UnknownHostException;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.HttpStatus;
导入org.apache.http.NameValuePair;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.HttpClient;
导入org.apache.http.client.entity.UrlEncodedFormEntity;
导入org.apache.http.client.methods.HttpPost;
导入org.apache.http.client.params.HttpClientParams;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.message.BasicNameValuePair;
导入org.apache.http.params.BasicHttpParams;
导入android.app.Activity;
导入android.content.Intent;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.Menu;
导入android.widget.Toast;
公共类BalanceCheckerActivity扩展活动{
私有最终字符串登录\u URL=”https://someloginsite.com“;//用户名和密码
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u balance\u checker);
字符串用户名=getIntent().getExtras().getString(“用户名”);
字符串密码=getIntent().getExtras().getString(“密码”);
//构建post参数、键和值对
List accountInfo=new ArrayList(2);
accountInfo.add(新的BasicNameValuePair(“inputEnterpriseId”,用户名));
accountInfo.add(新的BasicNameValuePair(“密码”,password));
//创建HTTP客户端
HttpClient HttpClient=新的DefaultHttpClient();
//创建HTTP Post
HttpPost HttpPost=新的HttpPost(登录地址);
BasicHttpParams params=新的BasicHttpParams();
setParameter(“inputEnterpriseID”,用户名);
参数设置参数(“密码”,密码);
httpPost.setParams(params);
//对POST参数进行Url编码
试一试{
setEntity(新的UrlEncodedFormEntity(accountInfo));
}
捕获(不支持的编码异常e){
//将错误写入日志
e、 printStackTrace();
startActivity(新意图(this,AccountInputActivity.class));
}
HttpResponse响应=null;
InputStreamReader iSR=null;
字符串源=null;
//发出HTTP请求
试一试{
response=httpClient.execute(httpPost);
//将响应写入日志
Log.d(“Http响应:,Response.toString());
iSR=新的InputStreamReader(response.getEntity().getContent());
BufferedReader br=新的BufferedReader(iSR);
来源=”;
而((source=br.readLine())!=null)
{
source+=br.readLine();
}
}捕获(客户端协议例外e){
//将异常写入日志
e、 printStackTrace();
startActivity(新意图(this,AccountInputActivity.class));
}捕获(IOE异常){
//将异常写入日志
e、 printStackTrace();
startActivity(新意图(this,AccountInputActivity.class));
}
系统输出打印项次(来源);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
getMenuInflater().充气(R.menu.activity\u balance\u checker,menu);
返回true;
}
}

在我看来,这基本上相当不错。我只看到一段明显错误的代码:

while((source = br.readLine()) != null)
{
    source += br.readLine();
}
这有点乱,我不会试图解开它,而是重写它

StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null)
  sb.append(line);
String source = sb.toString();
此外,您不应该从onCreate()或甚至从UI线程内部执行网络I/O,因为它可能会阻塞很长时间,冻结整个UI,并可能导致“应用程序无响应”(ANR)崩溃。但是,对于一个简单的测试程序,您可以暂时不考虑这个问题。对于生产代码,您可以启动一个线程或使用AsyncTask()

无论如何,我们对为您构建和调试程序并不感兴趣。你试过这个代码吗?结果如何

最后一点注意:像这样的登录序列可能会以cookie的形式返回身份验证令牌。我忘记了如何从HttpResponse中提取cookie,但您会希望这样做,然后将收到的cookie作为该网站后续请求的一部分


原始答复:

我想你明白了