如何使用JSON将数据发布到Web服务?

时间:2011-12-15 12:17:24

标签: android json

我必须将以下数据发送到URl的webservice

要发送的数据格式为:

new_member=[{"email":"himanshu@avigma.com","username":"himanshu01","pwd":"himanshu01"}]

其中emailusernamepwd是关键字,并且具有通过edittext字符串获取的相应值字符串。我点击按钮发布这些数据。

我没有得到任何回复bcoz我试图与我的合作开发者在他的iphone相同的应用程序iphone版本中反击检查,因为用户名和密码无效,服务器说。

我的Signup.java课程是:

    Button b1=(Button)findViewById(R.id.button1);
    b1.setOnClickListener(new OnClickListener()
    {
        EditText e=(EditText)findViewById(R.id.editText1);
        String a=e.getText().toString();
        EditText e1=(EditText)findViewById(R.id.editText1);
        String b=e1.getText().toString();
        EditText e2=(EditText)findViewById(R.id.editText1);
        String c=e2.getText().toString();
        public void onClick(View v) {
            // TODO Auto-generated method stub
             HttpClient client = new DefaultHttpClient(); 
                HttpConnectionParams.setConnectionTimeout(client.getParams(), 10000); //Timeout Limit 
                HttpResponse response; 
                JSONObject json = new JSONObject(); 
                try{ 
                    HttpPost post = new HttpPost("URL"); 
                    //System.out.println(post);
                    json.put("email", a);
                    json.put("username", b);
                    json.put("pwd",c); 
                    StringEntity se = new StringEntity( "JSON: " + json.toString());   
                    se.setContentEncoding(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 
 //System.out.println(response);
                }
                }
                catch(Exception e){ 
                    e.printStackTrace(); 
                    System.out.println(e.toString());
                    //createDialog("Error", "Cannot Estabilish Connection"); 
                } 
        }

    }
            );

请帮助我,我是JSON的新手,并在Android.Thanx中进行解析。

4 个答案:

答案 0 :(得分:11)

这是示例

HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(
    "https://api.dailymile.com/entries.json?oauth_token="
    + token);

httpPost.setHeader("content-type", "application/json");
JSONObject data = new JSONObject();

data.put("message", dailyMilePost.getMessage());
JSONObject workoutData = new JSONObject();
data.put("workout", workoutData);
workoutData.put("activity_type", dailyMilePost.getActivityType());
workoutData.put("completed_at", dailyMilePost.getCompletedAt());
JSONObject distanceData = new JSONObject();
workoutData.put("distance", distanceData);
distanceData.put("value", dailyMilePost.getDistanceValue());
distanceData.put("units", dailyMilePost.getDistanceUnits());
workoutData.put("duration", dailyMilePost.getDurationInSeconds());
workoutData.put("title", dailyMilePost.getTitle());
workoutData.put("felt", dailyMilePost.getFelt());

StringEntity entity = new StringEntity(data.toString(), HTTP.UTF_8);
httpPost.setEntity(entity);

HttpResponse response = httpClient.execute(httpPost);

查看此博客的完整信息http://simpleprogrammer.com/2011/06/04/oauth-and-rest-in-android-part-2/

答案 1 :(得分:4)

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);

nameValuePairs.add(new BasicNameValuePair("email", "himanshu@avigma.com"));  
nameValuePairs.add(new BasicNameValuePair("username", "himanshu01")); 
nameValuePairs.add(new BasicNameValuePair("pwd", "himanshu01")); 

// You have to add your parameters as nameValuePairs

String res  = "";
                try
                {
                    HttpClient httpclient = new DefaultHttpClient();  
                    HttpPost httppost = new HttpPost("URL");  

                             // Add your data  

                             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));  
                             HttpResponse response = httpclient.execute(httppost);  
                             res = EntityUtils.toString(response.getEntity());
                             JSONTokener t = new JSONTokener(res);
                             JSONArray a = new JSONArray(t);
                             JSONObject o = a.getJSONObject(0);
                             String sc = o.getString("success");
                             if(sc.equals("1"))
                             {
                                 // posted successfully
                             }
else
{
 // error occurred
}
                }
                catch (Exception e) 
                {

                    e.printStackTrace();
                }

不要忘记指定 android.permission.INTERNET 权限

答案 2 :(得分:2)

块括号表示JSON数组,因此您只需将json对象包装在JSONArray中。

JSONArray array = new JSONArray();
JSONObject json = new JSONObject();
json.put("email", a);
json.put("username", b);
json.put("pwd",c); 
array.put(json);

array放入实体。

重要提示:您不应在主线程上执行长时间运行(例如网络)任务。使用AsyncTask在后台正确执行长时间运行的任务,然后更新UI。

答案 3 :(得分:1)

首先,您需要将codeStrings的{​​{1}}放在EditTexts方法中。

然后看起来服务器只需要一个项onClick(),所以你需要创建一个JSONArray,如下所示:

JSONArray