无法从LH公共API生成访问令牌

时间:2018-07-10 15:39:52

标签: java android post android-volley

我一直试图从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);

        }
    });

}}

收到令牌后,我想创建一个应用程序来根据输入的坐标显示最近的机场。到目前为止,这些纬度和经度变量与它无关。请帮忙。提前致谢。祝你今天愉快。

1 个答案:

答案 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");

希望这很有帮助。一切顺利