2017-05-19 7 views
0

私は混乱しているのではないかと疑問を抱いています。私はandroid/nodejs/postgreSQL、 で作業していて、サーバーにHTTPリクエストを送信して情報を保存できました。ボレーでオブジェクトを送信

しかし、これは、ユーザーとモデルを関連付けることを前提とした優れたプラクティスなしで行っていました。

だから、basicyはレジスタフォームからデータを取得します。単純なparams.putをフォーム情報とともに実行し、キー/値情報を使ってデータを送信します。

しかし、私はユーザーモデルを持っていて、そのユーザーモデルにparams.putを渡して同じことをしたいと思っています。

これは良い習慣を考慮しているのですか?それとも、ユーザーモデルを忘れてこのようなことをするべきですか?ここ

は、私は現時点ではやっているものです:

public void register(View view) { 

     //get form data 
     final String username = usernameTxt.getText().toString(); 
     String password = passwordTxt.getText().toString(); 
     String email = emailTxt.getText().toString(); 
     Log.d("email",String.valueOf(isValidEmail(email))); 

     if (!isValidEmail(email)) { 
      emailTxt.setError("Invalid Email"); 
     } 

     //inicialize a map with pair key value 
     final Map<String, String> params = new HashMap<String, String>(); 

     // Add form fields to the map 
     params.put("username", username); 
     params.put("email", email); 
     params.put("password", password); 

     /** 
     * Efetua um pedido ao servidor 
     * 
     * @param URl url do servidor a aceder 
     * @param JSONObject objeto json a ser retornado através do access point 
     * 
     */ 
     JsonObjectRequest request = new JsonObjectRequest(URL, new JSONObject(params), 
       new Response.Listener<JSONObject>() { 
        @Override 
        public void onResponse(JSONObject response) { 
         //TODO verificar o status code da resposta apenas deverá registar login caso seja 200 
         //verifica 
         Log.d("response",response.toString()); 
         Intent i = new Intent(Register.this,Login.class); 
         i.putExtra("username",username); 
         startActivity(i); 
         finish(); 
        } 
       }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       String body; 
       //get response body and parse with appropriate encoding 
       if(error.networkResponse.data!=null) { 
        String statusCode = String.valueOf(error.networkResponse.statusCode); 
        try { 
         body = new String(error.networkResponse.data,"UTF-8"); 
         JSONObject jsonObj = new JSONObject(body); 
         Log.d("body",String.valueOf(jsonObj.get("message"))); 
         showToast(String.valueOf(jsonObj.get("message"))); 
        } catch (UnsupportedEncodingException e) { 
         showToast("You need to connect to the internet!"); 
        } catch (JSONException e) { 
         Log.d("json:","problems decoding jsonObj"); 
        } 
       } 
       //do stuff with the body... 
      } 


     }); 

     request.setRetryPolicy(new DefaultRetryPolicy(60000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

queue.add(request); 
} 
+0

はい、大量のデータを扱う場合は、問題を扱う際に正しいモデルを使用しているため、処理が簡単になります。 –

+0

はい、どのように私はそれを渡すことができますバレーの要求 –

+0

私は投稿 –

答えて

-1

が、それはあなたのアプリケーションに実装してみてください、お役に立てば幸いです

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 

    private static final String REGISTER_URL = "http://foo.com/UserRegistration/volleyRegister.php"; 

    public static final String KEY_USERNAME = "username"; 
    public static final String KEY_PASSWORD = "password"; 
    public static final String KEY_EMAIL = "email"; 


    private EditText editTextUsername; 
    private EditText editTextEmail; 
    private EditText editTextPassword; 

    private Button buttonRegister; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     editTextUsername = (EditText) findViewById(R.id.editTextUsername); 
     editTextPassword = (EditText) findViewById(R.id.editTextPassword); 
     editTextEmail= (EditText) findViewById(R.id.editTextEmail); 

     buttonRegister = (Button) findViewById(R.id.buttonRegister); 

     buttonRegister.setOnClickListener(this); 
    } 

    private void registerUser(){ 
     final String username = editTextUsername.getText().toString().trim(); 
     final String password = editTextPassword.getText().toString().trim(); 
     final String email = editTextEmail.getText().toString().trim(); 

     StringRequest stringRequest = new StringRequest(Request.Method.POST, REGISTER_URL, 
       new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Toast.makeText(MainActivity.this,response,Toast.LENGTH_LONG).show(); 
        } 
       }, 
       new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Toast.makeText(MainActivity.this,error.toString(),Toast.LENGTH_LONG).show(); 
        } 
       }){ 
      @Override 
      protected Map<String,String> getParams(){ 
       Map<String,String> params = new HashMap<String, String>(); 
       params.put(KEY_USERNAME,username); 
       params.put(KEY_PASSWORD,password); 
       params.put(KEY_EMAIL, email); 
       return params; 
      } 

     }; 



      RequestQueue requestQueue = Volley.newRequestQueue(this); 
      requestQueue.add(stringRequest); 
     } 

     @Override 
     public void onClick(View v) { 
      if(v == buttonRegister){ 
       registerUser(); 
      } 
     } 
    } 
+0

偉大な、あなたに感謝! –

+0

ようこそ@cris dois –

0

ステップ1:モデルクラスの構文解析可能/ Serializableを確認します。
ステップ2:モデルクラスのtoString()をオーバーライドします。
ステップ3: Map<String,JSONObject> params = new HashMap<>(); JSONObject object = null; try{ object = new JSONObject(classObject.toString()); }catch (Exception e){ } params.put("key", object); JSONObject objectParams = new JSONObject(params);
完了!

関連する問題