2016-06-24 8 views
0

私は現在、自分のサーバにユーザを登録するユーザのユーザ名、パスワード、電子メールを送信する必要があるプロジェクトに取り組んでいます。私はそのためにPOSTコマンドを使用しました.3つの値をユーザーに登録する必要があるため、その目的でContentValuesを使用しました。ここに私のコードは次のとおりです。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; 
    } 

は私getQuery方法は次のとおりです。

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

しかし、私はそれによって次のような応答を取得しています:

422にResponseCodeによって返されるステータスコードです
Result: name=ABC&email=abc%40xyz.com&password=123 
Result: 422 
System.err: java.io.FileNotFoundException: http://docpanel.myworkdetails.com/api/auth/register 

つまり:

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

サインアップページを動作させるために、POSTメソッドで引数を渡す方法がわかりません。私は正しいURLを持っています。

このサーバー側で問題が発生しているか、POSTを実装するのに間違いがありますか?

助けてください! ありがとうございます。

答えて

0

私は私はしなかったミスを作っていた

を解決httpUrlConnection.connect()を適切な場所に追加してください。httpURLConnectio正しい場所にn.setRequestProperty( "Accept"、 "/")がうまく動作しました。ここでは、HttpUrlConnectionを使用したPOSTリクエストを使用してsignUpページを作成する正しいコードを示します。

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

HttpPostの代わりに、HttpURLConnectionの

 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がAPI23から削除されています。なぜそれを使用しないのですか? – Swr7der

関連する問題