-1

我必须做一个“创建用户帐户”的事情。我必须向服务器发送一个 json 并检索另一个 json,这是结果。那么如何将 json 发送到服务器并检索另一个 json?

我已经构建了我必须发送的 json 对象。

Bellow 是我目前基于所学知识所做的尝试,但我还没有。

我发送的 json 被调用userCreate,url 字符串被调用path

create.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                    Thread t = new Thread() {

                        public void run() {
                            Looper.prepare(); //For Preparing Message Pool for the child Thread
                            HttpClient client = new DefaultHttpClient();
                            HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit
                            HttpResponse response;

                            try {
                                HttpPost post = new HttpPost(path);
                                StringEntity se = new StringEntity( userCreate.toString());  
                                se.setContentType(new BasicHeader(HTTP.CONTENT_TYPE, "application/json"));
                                post.setEntity(se);
                                response = client.execute(post);

                                /*Checking response */
                                if(response!=null){
                                    InputStream in = response.getEntity().getContent(); //Get the data in the entity
                                    Toast.makeText(ctx, in.toString(), 2000).show();
                                }

                            } catch(Exception e) {
                                e.printStackTrace();
                                Toast.makeText(ctx, "nu merge", 2000).show();
                            }
                        }
                    };

                    t.start();    

                }

        });


09-17 13:45:29.337: D/request(5838):  {"request":{"action":"createUser","user":{"last_name":"asd","first_name":"asd","username":"asd","password":"d41d8cd98f00b204e9800998ecf8427e","email":"asd@yahoo.com"}}}
09-17 13:45:29.337: W/System.err(5838): android.os.NetworkOnMainThreadException
09-17 13:45:29.337: W/System.err(5838):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1117)
09-17 13:45:29.337: W/System.err(5838):     at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
09-17 13:45:29.337: W/System.err(5838):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
09-17 13:45:29.337: W/System.err(5838):     at java.net.InetAddress.getAllByName(InetAddress.java:214)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:137)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
09-17 13:45:29.337: W/System.err(5838):     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
09-17 13:45:29.337: W/System.err(5838):     at com.xcommerce.androidstore.Profile.postJson(Profile.java:123)
09-17 13:45:29.337: W/System.err(5838):     at com.xcommerce.androidstore.Profile$1.onClick(Profile.java:70)
09-17 13:45:29.337: W/System.err(5838):     at android.view.View.performClick(View.java:4202)
09-17 13:45:29.337: W/System.err(5838):     at android.view.View$PerformClick.run(View.java:17340)
09-17 13:45:29.337: W/System.err(5838):     at android.os.Handler.handleCallback(Handler.java:725)
09-17 13:45:29.337: W/System.err(5838):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-17 13:45:29.337: W/System.err(5838):     at android.os.Looper.loop(Looper.java:137)
09-17 13:45:29.337: W/System.err(5838):     at android.app.ActivityThread.main(ActivityThread.java:5039)
09-17 13:45:29.337: W/System.err(5838):     at java.lang.reflect.Method.invokeNative(Native Method)
09-17 13:45:29.337: W/System.err(5838):     at java.lang.reflect.Method.invoke(Method.java:511)
09-17 13:45:29.337: W/System.err(5838):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-17 13:45:29.337: W/System.err(5838):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-17 13:45:29.337: W/System.err(5838):     at dalvik.system.NativeStart.main(Native Method)
4

1 回答 1

2

尝试关注

public String postJson(String url,JSONObject obj)
{
    String string = "";
    HttpGet confirmGet;
    try
    {
        HttpClient hc = new DefaultHttpClient();
        List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
        try
        {
            if(obj != null)
            {
                params.add(new BasicNameValuePair("", obj.toString()));
                Log.d("request", " " + obj.toString());
            }
        }catch (Exception e) 
        {
            e.printStackTrace();
        }

        try
        {
            new URLEncodedUtils();

            confirmGet = new HttpGet(URI.create(url + "?" + URLEncodedUtils.format(params,"utf-8")));

            HttpResponse confirmResponse = hc.execute(confirmGet);
            string = EntityUtils.toString(confirmResponse.getEntity());
        } catch (Exception e)
        {
            e.printStackTrace();
            string = "Exception";
        }
    }catch (Exception e) 
    {
        e.printStackTrace();
    }
    return string;
}

它将返回您的 json 字符串。URL 将是您要发送该 json 对象的那个 url。

一旦你有 json 响应,你需要打电话

jsonobject newJson = new JsonObject(string);
于 2013-09-17T13:00:30.393 回答