我正在尝试通过连接Fitbit API从我的帐户中检索数据。我有我的应用程序返回访问令牌我需要使HTTP请求返回JSON但我尝试的任何东西,它返回一个错误。我有两个活动 - MainActivity.java和TestActivity.java
在MainActivity.java中,我只是打开Chrome自定义标签,将用户定向到Fitbit身份验证(登录)页面。用户输入详细信息后,将根据Fitbit API文档将其重定向回TestActivity.java。我正在打印Acess Token,它向我证明它正在连接到API。
我需要做的是发出HTTP请求以JSON格式返回睡眠数据。我知道如何用Java实现它,但我不确定如何使用AsyncTask方式在Android中完成它。任何帮助表示赞赏!
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);
}
}
答案 0 :(得分:0)
我最终在这个问题上取得了突破。我发现我正在错误地提取访问令牌。所以,而不是做以下事情:
token = string.substring(string.indexOf("&access_token")+14);
我不得不使用它:
token = string.substring(string.indexOf("&access_token")+36,308);
然后,应用程序能够向Fitbit API发出必要的HTTP请求,该API返回了我需要的JSON数据。
答案 1 :(得分:0)
应更改一个代码顺序以防止FC。
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer " + token);