【发布时间】: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