2 chinibottle ChiniBottle 于 2016.03.13 23:57 提问

Android关于HttpPost无法发送的问题

Manifest里添加了Internet权限

Activity类

 import com.google.gson.Gson;

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    Button sendButton;
    EditText userEditText, pwdEditText;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sendButton = (Button) findViewById(R.id.button1);
        userEditText = (EditText)findViewById(R.id.editText1);
        pwdEditText = (EditText)findViewById(R.id.editText2);
        //利用Handler更新UI
        final Handler h = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                Toast.makeText(MainActivity.this, msg.toString(), Toast.LENGTH_LONG).show();
            }
        };

        sendButton.setOnClickListener(new OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                User user = new User();
                user.setName(userEditText.getText().toString().trim());
                user.setPwd(pwdEditText.getText().toString().trim());
                Gson gson = new Gson();
                String userJasonString = gson.toJson(user);
                new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();
            }           
        });
    }
}

创建的线程AccessNetwork

 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.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;


public class AccessNetwork implements Runnable{
    private String url;
    private String params;
    private Handler h;

    public AccessNetwork(String url, String params,Handler h) {
        super();
        this.url = url;
        this.params = params;
        this.h = h;
    }

    @Override
    public void run() {
        Message m = new Message();
        m.obj = sendPost(url, params);
        h.sendMessage(m);
    }

    public static String sendPost(String url, String params)
    {
        List<NameValuePair> nameValuePairs;
        String displayString="1";

        try
        {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost post = new HttpPost(url);
//              httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 15000); 
//              httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 15000);
//              nameValuePairs= new ArrayList<NameValuePair>();
//              nameValuePairs.add(new BasicNameValuePair("params", params));
//              post.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8));
            HttpResponse rsp = httpClient.execute(post);
            HttpEntity httpEntity = rsp.getEntity();
            displayString += EntityUtils.toString(httpEntity);
        }
        catch (Exception e)
        {
            //Toast.makeText(null,e.toString(), Toast.LENGTH_LONG).show();
            e.printStackTrace();
        }
        return displayString;
    }
}

发送带不带参数的Post请求服务器端都无法得到。

7个回答

bdmh
bdmh   Ds   Rxr 2016.03.14 07:20
已采纳

如果发送错误,你应该能看到错误日志的,然后核查url是否正常,端口是否打开等网络问题

ChiniBottle
ChiniBottle 根据您说的我看了日志发现url没有以http://开头报了错。谢谢!
2 年多之前 回复
ChiniBottle
ChiniBottle 对于错误日志我也有个问题。。有的时候LogCat里面什么都没有是为啥?
2 年多之前 回复
wen_wxpk
wen_wxpk   2016.03.14 08:09

典型问题,没开子线程,网络操作要在工作线程执行

ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
gincoo
gincoo   2016.03.14 09:00
 new Thread(
                public void run(){

}).start();
dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.14 09:29

初学者不要弄清楚原理,用OKHttp或者Volley就能解决问题

jjarchu
jjarchu   2016.03.14 10:16

Android的4.0版本后,网络请求操作要在子线程里面运行。不能在主线程里面。

ChiniBottle
ChiniBottle 不好意思。。一下发了三条O.O
2 年多之前 回复
ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
ChiniBottle
ChiniBottle 我在OnClickListener里面有new Thread(new AccessNetwork("192.168.199.1:8888/gcgl/user.do?method=login",userJasonString, h)).start();这不算是在子线程里面进行吗?
2 年多之前 回复
hou_weiyi
hou_weiyi   2016.03.14 16:42

看url像内部地址,是否已经连上内网进行请求?

u014427391
u014427391   2016.03.15 11:12

Android4.0的都要放在线程里,一般都是通过异步任务获取Handler机制的
你可以参考我的博客哦!http://blog.csdn.net/u014427391/article/details/50255285
希望可以帮助您!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
HttpURLConnection 、HttpPost、Okhttp 等POST方式发送JSON数据
HttpURLConnection 、HttpPost、Okhttp 等POST方式发送JSON数据的方式,亲测可行
Android平台HttpGet、HttpPost请求实例
Android客户端请求服务器端的详细解释1. Android客户端与服务器端通信方式: Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式。 2. 解析服务器端返回数据的解释: (1).对于服务器端来说,返回给客户端的数据格式一般分为html、xml和json这三种格式。 (2). JSON(Javascript O
Android 无法用HttpClient.execute(httpGet)访问网页
这个没有什么具体的逻辑上的迷惑, 主要原因是Anroid 4.0 之后不允许在主线程里面发起网络请求。 解决办法:总结网上2种(还有别的好办法的看到的朋友)  1 是异步  2 是子线程 From:http://www.eoeandroid.com/thread-329813-1-1.html
Android使用HttpPost向服务器发送Json数据
Android使用HttpPost向服务器发送Json数据
Android开发中HTTP协议HttpPost向服务器发送JSon数据格式的数据
public void sendBjData(final String send) { new Thread() { @Override public void run() { HttpClient httpClient = new DefaultHttpClient(); String host_pool = application_iGBS.getApi_ed
Android中使用HttpPost上传图片和数据
1、首先需要对应的JAR包 导入 httpmime-4.1.1.jar [java] view plaincopy package url;      import io.IoStreamUtil;      import java.io.File;   import java.io.IOException;   import java.
java代码发送JSON格式的httpPOST请求
java代码发送JSON格式的httpPOST请求
Android http post 中文乱码问题的解决
最近的项目中,要在安卓客户端填写信息,发送至服务器,用的是HTTP POST 方法,但是后台出现了中文乱码,内容如下: 服务器收到的数据如下: 【内容1】 {"content":"?????????","townId":"14","companyId":"8","date":"2014-12-27","supervisor":"??","userId":0} 这个功能除了在安卓客
Android使用HttpClient以Post、Get请求服务器发送数据的方式(普通和json)
讲这个之前,我们先来说说get和post两种请求的区别吧!!! 1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.jsp?name=test1&id=123456. POST方法是把提交的数据放在HTTP包的Body中. 2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制. 3.
httpclient使用post方式发送json数据,以及服务端的接收
1、客户端使用StringEntity封装数据 2、服务端先从request.getInputStream();中获取数据,再把字节流转为字符流 3、最后用response.getWriter().write(param);返回数据给客户端 4、客户端使用httpResponse.getEntity()..getContent()获得InputStream