Closed. This question is
not reproducible or was caused by typos。它当前不接受答案。
想改善这个问题吗?更新问题,以便将其作为
on-topic用于堆栈溢出。
6年前关闭。
Improve this question
我正在使用
gmusic.api for android
作为我的android应用程序的库项目。为了进行身份验证,我从
here复制了一个名为GoogleAuthTask的AsyncTask。
public class GoogleAuthTask extends AsyncTask<String, Void, Boolean> {
private Activity mActivity;
public GoogleAuthTask(Activity activity) {
mActivity = activity;
}
@Override
protected Boolean doInBackground(String... params) {
boolean success = false;
try {
String authToken = GoogleAuthUtil.getToken(mActivity, params[0],
"sj");
if (!TextUtils.isEmpty(authToken)) {
GoogleMusicApi.createInstance(mActivity);
success = GoogleMusicApi.login(mActivity, authToken);
if (!success)
GoogleAuthUtil.invalidateToken(mActivity, authToken);
}
} catch (UserRecoverableAuthException e) {
mActivity.startActivityForResult(e.getIntent(), 1001);
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (GoogleAuthException e) {
e.printStackTrace();
}
return success;
}
}
通过此AsyncTask,可以调用GoogleMusicApi类的static login()方法。
public static final boolean login(Context context, String authToken)
{
if(!TextUtils.isEmpty(authToken))
{
SimpleForm form = new SimpleForm().close();
GoogleMusicApi.setAuthorizationHeader(authToken);
mHttpClient.post(context, "https://play.google.com/music/listen?hl=en&u=0", new ByteArrayEntity(form.toString().getBytes()), form.getContentType());
return true;
}
else
return false;
}
如果我进入此方法并打印post()调用的响应,它将返回null。对此post()的任何调用也是如此。例如,如果我调用getAllSongs(),则它具有post()调用,该调用再次返回null。
public static final ArrayList<Song> getAllSongs(Context context) throws JSONException
{
return getSongs(context, "");
}
public static final ArrayList<Song> getSongs(Context context, String continuationToken) throws JSONException
{
SimpleForm form = new SimpleForm();
form.addField("json", "{\"continuationToken\":\"" + continuationToken + "\"}");
form.close();
String response = mHttpClient.post(context, "https://play.google.com/music/services/loadalltracks?u=0&xt=" + getXtCookieValue(), new ByteArrayEntity(form.toString().getBytes()), form.getContentType());
JSONObject jsonObject = new JSONObject(response);
Playlist playlist = new Playlist().fromJsonObject(jsonObject);
ArrayList<Song> chunkedSongList = new ArrayList<Song>();
chunkedSongList.addAll(playlist.getPlaylist());
if(!TextUtils.isEmpty(playlist.getContinuationToken()))
chunkedSongList.addAll(getSongs(context, playlist.getContinuationToken()));
return chunkedSongList;
}
我在这里想念什么吗?我没有找到使用这些功能的确切示例。
编辑:
由于post()调用的响应始终为null,因此在调用getAllSongs()时得到以下堆栈跟踪:
12-04 14:33:36.640: E/AndroidRuntime(29132): FATAL EXCEPTION: AsyncTask #1
12-04 14:33:36.640:E / AndroidRuntime(29132):java.lang.RuntimeException:执行doInBackground()时发生错误
12-04 14:33:36.640:E / AndroidRuntime(29132):at android.os.AsyncTask $ 3.done(AsyncTask.java:278)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.FutureTask $ Sync.innerSetException(FutureTask.java:273)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:307)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-04 14:33:36.640:E / AndroidRuntime(29132):在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:208)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:569)
12-04 14:33:36.640:E / AndroidRuntime(29132):位于java.lang.Thread.run(Thread.java:856)
12-04 14:33:36.640:E / AndroidRuntime(29132):由:java.lang.NullPointerException
12-04 14:33:36.640:E / AndroidRuntime(29132):位于org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116)
12-04 14:33:36.640:E / AndroidRuntime(29132):位于org.json.JSONTokener.nextValue(JSONTokener.java:94)
12-04 14:33:36.640:E / AndroidRuntime(29132):位于org.json.JSONObject。(JSONObject.java:154)
12-04 14:33:36.640:E / AndroidRuntime(29132):位于org.json.JSONObject。(JSONObject.java:171)
12-04 14:33:36.640:E / AndroidRuntime(29132):在com.android.gm.api.GoogleMusicApi.getSongs(GoogleMusicApi.java:146)
12-04 14:33:36.640:E / AndroidRuntime(29132):在com.android.gm.api.GoogleMusicApi.getAllSongs(GoogleMusicApi.java:134)
12-04 14:33:36.640:E / AndroidRuntime(29132):在com.example.testgmusic.MainActivity $ GoogleAuthTask.doInBackground(MainActivity.java:100)
12-04 14:33:36.640:E / AndroidRuntime(29132):at com.example.testgmusic.MainActivity $ GoogleAuthTask.doInBackground(MainActivity.java:1)
12-04 14:33:36.640:E / AndroidRuntime(29132):at android.os.AsyncTask $ 2.call(AsyncTask.java:264)
12-04 14:33:36.640:E / AndroidRuntime(29132):at java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:305)
12-04 14:33:36.640:E / AndroidRuntime(29132):...还有5个
我是一名优秀的程序员,十分优秀!