2017-12-06 8 views
0

저는 웹 서비스와 통신하기 위해 Android를 처음 사용하고 발리 슛을 사용합니다. Postman detailsAndroid Volley- 원본 텍스트를 보내고 json 응답을받는 방법

나는 = grant_type = 비밀번호 & 이름 = MyUserName 에다 & 비밀번호를 사용하여 시도 만 postman.I에서 작동 웹 서비스에 대한 원시 문자 메시지를 보내는 발견 내 mainActivity에서 두 EDITTEXT에서 MyUserName 에다 및 mypassword를 받고 mypassowrd. 더 좋은 방법이 있나요?

public class MainActivity extends AppCompatActivity { 

Button btnLogin,btnFetch,btnExit; 
EditText editTxtUsr,editTxtPass; 
TextView txtView; 
String uRL ="****"; 


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

    btnLogin=findViewById(R.id.buttonLogin); 
    btnFetch=findViewById(R.id.buttonFetch); 
    btnExit=findViewById(R.id.buttonExit); 
    editTxtUsr=findViewById(R.id.editTextUsrname); 
    editTxtPass=findViewById(R.id.editTextPassword); 
    txtView=findViewById(R.id.textViewData); 


    btnLogin.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      String wsURL = uRL + "/authtoken"; 
      //final String appData = "grant_type=password&username=" + editTxtUsr + "&password=" + editTxtPass; 

      StringRequest request = new StringRequest(Request.Method.POST, wsURL, new Response.Listener<String>() { 
       @Override 
       public void onResponse(String response) { 
        if (response.equals("true")) { 
         Toast.makeText(MainActivity.this, "Login Successful", Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(MainActivity.this, "Incorrect ", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError volleyError) { 
        Toast.makeText(MainActivity.this, "Some error occured" + volleyError, Toast.LENGTH_SHORT).show(); 
       } 
      }) { 
       @Override 
       public Map<String,String> getHeaders() throws AuthFailureError { 
        Map<String, String> headers = new HashMap<>(); 
        headers.put("Content-Type", "application/text"); 
        headers.put("charset", "TYPE_UTF8_CHARSET"); 
        return headers; 

       } 

       @Override 
       protected Map<String,String> getParams() throws AuthFailureError { 
        Map<String, String> parameters = new HashMap<>(); 
        parameters.put("grand_type", "SET_VALUE"); 
        parameters.put("Username", editTxtUsr.getText().toString()); 
        parameters.put("Password", editTxtPass.getText().toString()); 
        return parameters; 

       } 
      }; 

      RequestQueue rQueue= Volley.newRequestQueue(MainActivity.this); 
      rQueue.add(request); 
     } 
    }); 

    btnExit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      finish(); 
     } 
    }); 
} 
} 

나는 이것을 달성하기 위해 다양한 방법을 시도했지만 운이 없었습니다. 웹 서비스에 연결하려고하는 코드 예제입니다.

내가 얻을 [253] BasicNetwork.performRequest : I에 유래 통해 철저하게 검색하지만 난 내 질문에 대한 정답을 찾을 수 없습니다에 대한 ...

예기치 않은 응답 코드 (400). 도움이 될 것입니다.

답변

0

나는이 일을하고 있지만 질문을 게시 한 후에 몇 가지 시도를 한 후에 해결책을 찾았습니다. 대답은 생각보다 간단합니다. 당신이해야 할 일은 objectrequest를 만들고 게시 할 텍스트로 본문을 덮어 쓰는 것입니다. 헤더 나 매개 변수를 변경하지 않아도됩니다. Stringrequest를 사용하여 여전히 답을 찾을 수 없습니다.

   @Override 
       public byte[] getBody() { 
        try { 
         return requestBody.getBytes("utf-8"); 
        } catch (UnsupportedEncodingException e) { 
         e.printStackTrace(); 
         return null; 
        } 
       } 

여기서 requestBody는 문자열로 보내려는 원본 텍스트입니다.