2011-12-15 31 views
8

muszę wysłać następujące dane do usługa pod adresem URLJak przesłać dane do usługi sieciowej za pomocą JSON?

Format danych do wysłania jest:

new_member=[{"email":"[email protected]","username":"himanshu01","pwd":"himanshu01"}] 

gdzie email, username i pwd jest kluczem i ma odpowiedni ciąg wartości idącą przez EditText strunowy. Publikuję te dane po kliknięciu przycisku.

Nie otrzymuję żadnej odpowiedzi bcoz Próbowałem kontratakować to sprawdzić z moim deweloperem co w jego tej samej wersji iPhone app, ponieważ nazwa użytkownika i hasło jest nieprawidłowe jest powiedziane przez serwer.

Moja Signup.java klasa:

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"); 
       } 
     } 

    } 
      ); 

Proszę mi pomóc jestem nowicjuszem w JSON i analizowanie w Android.Thanx.

Odpowiedz

10

oto przykład

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); 

zobacz pełne informacje z tego bloga: http://simpleprogrammer.com/2011/06/04/oauth-and-rest-in-android-part-2/

+0

Niż za odpowiedź proszę mi powiedzieć, jak przekazuję new_member = tak, jak ja dołączam w adresie URL, ale faktyczny podany URL to http://www.fourerr.com/ws/signup Czy powinienem wziąć newmember jako json obiekt.?? Proszę mi pomóc .. –

+0

co to wartość new_member? spróbuj przekazać jak token został przekazany w przykładzie – Pratik

+2

Polecam używanie nie ** StringEntity entity = new StringEntity (data.toString()); ** ale ** StringEntity entity = new StringEntity (paramInput.toString(), HTTP.UTF_8); ** - W moim przypadku rozwiązało to problem z kodowaniem znaków cyrylicy w łańcuchu json. – Prizoff

2

Blok nawiasów oznacza tablicę JSON, więc wystarczy zawinąć obiekt Json w JSONArray.

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

Umieszczono array w elemencie.

Ważne: nie powinieneś wykonywać zadań długotrwałych (na przykład sieciowych) w wątku głównym. Należy użyć AsyncTask, aby prawidłowo wykonywać długo działające zadania w tle, a następnie aktualizować interfejs użytkownika.

+0

Dzięki za odpowiedzi proszę mi powiedzieć jak mijam new_member = jak ja dołączając w url, ale rzeczywista warunkiem url jest http://www.fourerr.com/ws/signup Czy powinienem wziąć newmember jako obiekt json? Proszę mi pomóc .. –

1

Przede wszystkim trzeba umieścić code który dostaje Strings z EditTexts wewnątrz metody onClick().

Wtedy wygląda serwer oczekuje JSONArray z jednego elementu, więc trzeba stworzyć JSONArray, coś jak to:

JSONArray jsonArray=new JSONArray(); 
jsonArray.put(json); //your current json 
StringEntity entity=new StringEntity("new_member="+jsonArray); 
4
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); 

nameValuePairs.add(new BasicNameValuePair("email", "[email protected]")); 
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(); 
       } 

Dont zapomniał podać android.permission.INTERNET uprawnień

Powiązane problemy