我一直试图从LH公共API生成访问令牌,但是当我使用Volley发送POST请求时,却收到了“ com.android.Volley.AuthFailureError”。
package jvtech.jasvir;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import org.json.JSONException;
import org.json.JSONObject;
public class MainActivity extends AppCompatActivity {
EditText latitude,longitude;
Button submit;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
latitude=(EditText)findViewById(R.id.lat);
longitude=(EditText)findViewById(R.id.lon);
submit=(Button)findViewById(R.id.submit);
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String url="https://api.lufthansa.com/v1/oauth/token";
String key="abc";
String secret="abc";
String grant_type= "abc";
JSONObject object=new JSONObject();
try{
object.put("client_id",key);
object.put("client_secret",secret);
object.put("grant_type",grant_type);
}
catch(JSONException e)
{
e.printStackTrace();
}
RequestQueue queue= Volley.newRequestQueue(MainActivity.this);
JsonObjectRequest request=new JsonObjectRequest(Request.Method.POST, url, object, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try
{
Toast.makeText(MainActivity.this, ""+response.getString("access_token"), Toast.LENGTH_SHORT).show();
}
catch (JSONException e)
{
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(MainActivity.this, ""+error, Toast.LENGTH_SHORT).show();
}
});
queue.add(request);
}
});
}}
收到令牌后,我想创建一个应用程序来根据输入的坐标显示最近的机场。到目前为止,这些纬度和经度变量与它无关。请帮忙。提前致谢。祝你今天愉快。
答案 0 :(得分:0)
第一次
我不认为REST API接受JSON对象作为请求数据。
如果您看到他们的文档,则显示"Content-Type: application/x-www-form-urlencoded"
。
这意味着数据应以key1=value1&key2=value2...
以此作为发送x-www-form-uriencoded
类型请求的参考
https://www.itsalif.info/content/android-volley-tutorial-http-get-post-put#highlighter_784982
,然后在Map(我们使用Map设置Key = value类型的参数)中使用这些参数来设置请求参数
param.put("client_id","your client id");
param.put("client_secret", "your secret");
param.put("grant_type","client_credentials");
希望这很有帮助。一切顺利