首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android HTTP-POST

Android HTTP-POST
EN

Stack Overflow用户
提问于 2013-11-05 14:43:56
回答 2查看 3.7K关注 0票数 0

我是HTTP-POST的新手。我有一个网站"http://otu-git.dyndns.ws/pvm_srv/echo_json.html“,我可以在那里

代码语言:javascript
复制
    { 
        "USR":
        {   
            "fun":"validarUsuario",
            "txtUser":"123",
            "md5Passwd":"123"
        }
    }

我得到的回应是

代码语言:javascript
复制
    {"success":"true","nombre":"test"}

我想知道如何在我的Android应用程序中做到这一点。有人能给我指路吗?

代码语言:javascript
复制
    DefaultHttpClient httpClient=new DefaultHttpClient();

    HttpPost httpPost =new HttpPost("http://otu-git.dyndns.ws/pvm_srv/echo_json.html");
    HttpResponse response;

    StringEntity se;

    JSONObject json =new JSONObject();
    try {
        json.put("fun", "validarUsuario");
        json.put("txtUser", "123");
        json.put("md5Passwd", "123");

        se=new StringEntity(json.toString());

        httpPost.setEntity(se);

        response=httpClient.execute(httpPost);

        Log.i(tag, "JSON "+response.toString());

    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

这是我的代码。您能检查一下它是否正确吗?我已为该应用程序添加了Internet权限。

@Ngathet我得到以下错误

代码语言:javascript
复制
11-05 14:02:38.489: E/AndroidRuntime(8844): FATAL EXCEPTION: main
11-05 14:02:38.489: E/AndroidRuntime(8844): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.dhiraj.mpos/com.dhiraj.mpos.LoginActivity}: android.os.NetworkOnMainThreadException
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2049)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2083)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread.access$600(ActivityThread.java:134)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.os.Looper.loop(Looper.java:137)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread.main(ActivityThread.java:4697)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at java.lang.reflect.Method.invokeNative(Native Method)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at java.lang.reflect.Method.invoke(Method.java:511)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at dalvik.system.NativeStart.main(Native Method)
11-05 14:02:38.489: E/AndroidRuntime(8844): Caused by: android.os.NetworkOnMainThreadException
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1119)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at java.net.InetAddress.lookupHostByName(InetAddress.java:441)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:243)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at java.net.InetAddress.getAllByName(InetAddress.java:220)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at com.dhiraj.mpos.LoginActivity.insert(LoginActivity.java:88)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at com.dhiraj.mpos.LoginActivity.onCreate(LoginActivity.java:45)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.Activity.performCreate(Activity.java:4539)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
11-05 14:02:38.489: E/AndroidRuntime(8844):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2013)

`

EN

回答 2

Stack Overflow用户

发布于 2013-11-05 14:46:41

http://loopj.com/android-async-http/

将此客户端用于您的目的.Its是最好的httpclient库之一

票数 1
EN

Stack Overflow用户

发布于 2013-11-05 15:20:59

您需要先创建JSONObject才能请求,例如

代码语言:javascript
复制
JSONObject obj = new JSONObject();

obj.put("fun", "validarUsuario");
obj.put( "txtUser",123);
obj.put( "md5Passwd",123);

并使用以下方法通过将上述 obj 传递给 YourJsonObj来获取响应

代码语言:javascript
复制
public JSONObject insert(JSONObject YourJsonObj)
    {
            HttpPost postRequest = new HttpPost(YourURLString);

            StringEntity entity = new StringEntity(YourJsonObj.toString());
            entity.setContentType("application/json");

            postRequest.setHeader("Content-Type", "application/json");
            postRequest.setHeader("Accept", "application/json");
            postRequest.setEntity(entity);

            HttpResponse response = client.execute(postRequest);
            int status = response.getStatusLine().getStatusCode();

            if (status == 200) {
                HttpEntity e = response.getEntity();
                String data = EntityUtils.toString(e);
                JSONObject obj = new JSONObject(data);
                return obj;
            } else {
                return null;
            }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19783256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档