【问题标题】:How do I send a HTTP request using OAUTH2 in Android?如何在 Android 中使用 OAUTH2 发送 HTTP 请求?
【发布时间】:2018-03-04 14:36:50
【问题描述】:

我正在尝试通过连接到 Fitbit API 从我的帐户中检索数据。我的应用程序返回了访问令牌,我需要发出返回 JSON 的 HTTP 请求,但我尝试的任何操作都会返回错误。我有两个活动 - MainActivity.java 和 TestActivity.java

在 MainActivity.java 中,我只是打开一个 Chrome 自定义选项卡以将用户引导至 Fitbit 身份验证(登录)页面。一旦用户输入他们的详细信息,他们就会根据 Fitbit API 文档被重定向回 TestActivity.java。然后我正在打印向我证明它正在连接到 API 的访问令牌。

我需要做的是发出一个 HTTP 请求,以 JSON 格式返回睡眠数据。我知道如何在 Java 中执行此操作,但我不确定如何在 Android 中使用 AsyncTask 方式执行此操作。任何帮助表示赞赏!

public class TestActivity extends AppCompatActivity {

String string;
String token;


@Override
protected void onNewIntent(Intent intent) {
    string = intent.getDataString();
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_test);
    onNewIntent(getIntent());
    //Toast.makeText(TestActivity.this, string , Toast.LENGTH_LONG).show();
    Log.e("TAG", string);
    Log.e("TAG", string.substring(string.indexOf("&access_token")+14));

    token = string.substring(string.indexOf("&access_token")+14);

    Context context = getApplicationContext();
    Toast toast = Toast.makeText(context,"Access Token: "+ token,Toast.LENGTH_LONG );

    Log.i("TAG", "Access Token: "+ token);



    new JSONTask().execute("https://api.fitbit.com/1.2/user/-/sleep/date/2018-01-30.json");






}

public class JSONTask extends AsyncTask<String,String,String>
{

    @Override
    protected String doInBackground(String... params) {

        HttpURLConnection connection = null;
        BufferedReader reader = null;

        try
        {
            URL url = new URL(params[0]);
            connection.setRequestMethod("GET");
            connection.setRequestProperty("Authorization", "Bearer " + token);
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();

            InputStream stream = connection.getInputStream();
            reader = new BufferedReader(new InputStreamReader(stream));

            StringBuffer buffer = new StringBuffer();

            String line = "";

            while((line = reader.readLine()) !=null)
            {
                buffer.append(line);
            }

            return buffer.toString();

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;

    }

    @Override
    protected void onPostExecute(String s)
    {
        super.onPostExecute(s);
        Log.i("TAG", s);
    }
}

【问题讨论】:

    标签: json android-asynctask oauth-2.0 fitbit


    【解决方案1】:

    我最终在这个问题上取得了突破。我发现我错误地提取了访问令牌。因此,不要执行以下操作:

     token = string.substring(string.indexOf("&access_token")+14);
    

    我不得不使用这个:

    token = string.substring(string.indexOf("&access_token")+36,308);
    

    然后,该应用程序能够向 Fitbit API 发出必要的 HTTP 请求,该 API 返回了我需要的 JSON 数据。

    【讨论】:

      【解决方案2】:

      为了防止FC,应该改变一个代码顺序。

      connection = (HttpURLConnection) url.openConnection();
      connection.setRequestMethod("GET");
      connection.setRequestProperty("Authorization", "Bearer " + token);
      

      【讨论】:

        猜你喜欢
        • 2020-02-02
        • 1970-01-01
        • 2012-09-19
        • 1970-01-01
        • 2016-11-19
        • 1970-01-01
        • 1970-01-01
        • 2011-09-23
        • 1970-01-01
        相关资源
        最近更新 更多