2016-06-24 17 views
0

Ich arbeite derzeit an einem Projekt, in dem ich Benutzernamen, Passwort und E-Mail eines Benutzers für die Registrierung des Benutzers auf meinem Server senden müssen. Ich habe den Befehl POST dafür verwendet und da ich 3 Werte für die Registrierung eines Benutzers senden muss, habe ich ContentValues ​​für diesen Zweck verwendet. Hier ist mein Code:Post Anfrage für die Registrierung von Benutzerdaten auf dem Server von HttpUrlConnection

@Override 
    protected String doInBackground(String... params) { 
     try { 
      url = new URL(params[0]); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoInput(true); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); 

      ContentValues values = new ContentValues(); 
      values.put("email", "[email protected]"); 
      values.put("password", "123"); 
      values.put("name","ABC"); 

      outputStream = httpURLConnection.getOutputStream(); 

      bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
      bufferedWriter.write(getQuery(values)); 
      bufferedWriter.flush(); 

      statusCode = httpURLConnection.getResponseCode(); 

      Log.i("Result",String.valueOf(statusCode)); 

      inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 

      InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
      int data = inputStreamReader.read(); 
      while (data != -1) { 
       char current = (char) data; 
       result += current; 
       data = inputStreamReader.read(); 
      } 

      JSONObject jsonObject = new JSONObject(result); 

      Log.i("Result",String.valueOf(jsonObject)); 

      if (statusCode == 200) { 
       inputStream = new BufferedInputStream(httpURLConnection.getInputStream()); 

       Log.i("Result","Correct Data Returned"); 

       JSONObject jsonObject = new JSONObject(response); 

       return true; 

      } else { 
       Log.i("Result","Data not returned"); 
       return false; 
      } 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } finally { 
      try { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       if (outputStream != null) { 
        outputStream.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 

Hier ist meine getQuery Methode:

private String getQuery(ContentValues values) throws UnsupportedEncodingException 
    { 
     StringBuilder result = new StringBuilder(); 
     boolean first = true; 

     for (Map.Entry<String, Object> entry : values.valueSet()) 
     { 
      if (first) 
       first = false; 
      else 
       result.append("&"); 

      result.append(URLEncoder.encode(entry.getKey(), "UTF-8")); 
      result.append("="); 
      result.append(URLEncoder.encode(String.valueOf(entry.getValue()), "UTF-8")); 
     } 

     Log.i("Result",result.toString()); 

     return result.toString(); 
    } 

Aber ich bin immer folgende Antwort durch:

Result: name=ABC&email=abc%40xyz.com&password=123 
Result: 422 
System.err: java.io.FileNotFoundException: http://docpanel.myworkdetails.com/api/auth/register 

Wo 422 ist der Statuscode zurückgegeben von Response das bedeutet:

"errors": { 
    "email": [ 
     "The email field is required." 
    ], 
    "password": [ 
     "The password field is required." 
    ], 
    "name": [ 
     "The password field is required." 
    ] 
    }, 
    "status_code": 422 

Ich verstehe nicht, wie man Argumente mit der POST-Methode weitergibt, damit meine Anmeldeseite funktioniert. Und ich habe die richtige URL.

Ist dieser Server Fehler oder ich mache Fehler bei der Implementierung von POST?

Bitte Hilfe! Vielen Dank im Voraus.

Antwort

0

Gelöst

Ich war, Fehler zu machen, die ich nicht habe Fügen Sie httpUrlConnection.connect() an der richtigen Stelle und auch httpURLConnectio hinzu n.setRequestProperty ("Accept", "/") an der richtigen Stelle hat es funktioniert gut. Hier ist also der richtige Code, mit der POST-Anfrage mit HttpURLConnection verwendet wird, um Anmeldeseite möglich zu machen:

protected String doInBackground(String... params) { 
     try { 
      url = new URL(params[0]); 
      httpURLConnection = (HttpURLConnection) url.openConnection(); 
      httpURLConnection.setDoInput(true); 
      httpURLConnection.setDoOutput(true); 
      httpURLConnection.setRequestMethod("POST"); 
      httpURLConnection.setRequestProperty("Accept","*/*"); 

      ContentValues values = new ContentValues(); 
      values.put("email", "[email protected]"); 
      values.put("password", "hjh"); 
      values.put("name","hui"); 

      httpURLConnection.connect(); 

      outputStream = httpURLConnection.getOutputStream(); 

      bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream)); 
      bufferedWriter.write(getQuery(values)); 
      bufferedWriter.flush(); 

      statusCode = httpURLConnection.getResponseCode(); 

      inputStream = httpURLConnection.getInputStream(); 

      if (statusCode == 200) { 
       InputStreamReader inputStreamReader = new InputStreamReader(inputStream); 
       int data = inputStreamReader.read(); 
       while (data != -1) { 
        char current = (char) data; 
        result += current; 
        data = inputStreamReader.read(); 
       } 

       JSONObject jsonObject = new JSONObject(result); 

       Log.i("Result",String.valueOf(jsonObject)); 

      } else { 
       Log.i("Result","false"); 
       return false; 
      } 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } finally { 
      try { 
       if (inputStream != null) { 
        inputStream.close(); 
       } 
       if (outputStream != null) { 
        outputStream.close(); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
     return null; 
    } 
0

Sie Httppost statt HttpURLConnection verwenden könnte

 final HttpParams httpParams = new BasicHttpParams(); 
     HttpConnectionParams.setConnectionTimeout(httpParams, Constants.CONNECTION_TIMEOUT); 
     HttpClient httpClient = new DefaultHttpClient(httpParams); 
     HttpPost httpPost = new HttpPost("yourBackendUrl"); 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
     nameValuePairs.add(new BasicNameValuePair("key","value")); 
     httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpClient.execute(httpPost); 
     InputStream inStream = response.getEntity().getContent(); 
     builder = new StringBuilder(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(inStream)); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      builder.append(line); 
     } 
     JSONObject json = new JSONObject(builder.toString()); 
+0

HttpPost wurde aus API23 entfernt, soweit ich weiß, wegen einiger Sicherheitsmängel, weshalb ich das nicht verwende. – Swr7der