我正在使用Google Spreadsheets制作Android应用。我正在扫描书籍中的条形码,使用Google Books API查找信息,然后我需要将此信息保存到表格中。
以下代码位于MainActivity中:
private class GetBookInfo extends AsyncTask <String, Void, String> {
@Override
protected String doInBackground(String... urls) {
// make Call to the url
makeCall("https://www.googleapis.com/books/v1/volumes?" +
"q=isbn:" + ean_content + "&AIzaSyCpYez5556X4UzPV6rF4kkspj9DsCs_Q_c");
//print the call in the console
System.out.println("https://www.googleapis.com/books/v1/volumes?" +
"q=isbn:" + ean_content + "&AIzaSyCpYez5556X4UzPV6rF4kkspj9DsCs_Q_c");
return null;
}
@Override
protected void onPreExecute() {
// we can start a progress bar here
}
@Override
protected void onPostExecute(String result) {
String ruta = save_cover(getApplicationContext(), title, book_cover);
Intent intent = new Intent(MainActivity.this, Spreadsheets.class);
finish();
startActivity(intent);
}
}
在此代码之后,我有public void makeCall(String stringURL)
。它搜索书的标题,作者,日期,描述和书的类别。
我有另一项活动:
public class Spreadsheets extends Activity implements EasyPermissions.PermissionCallbacks
在此活动中,我有以下代码写入Google表格:
public void setDataToApi (String title, String author, String date, String category, String description) throws IOException {
String spreadsheetId = "1Gg121IjABekfSTKXg_TQzJgg4boxvYIQnmf_K4YDboo";
String range = "Sheet1!A2:E2";
List<List<Object>> values = new ArrayList<>();
List<Object> data1 = new ArrayList<>();
data1.add(title);
data1.add(author);
data1.add(date);
data1.add(category);
data1.add(description);
values.add(data1);
ValueRange valueRange = new ValueRange();
valueRange.setMajorDimension("ROWS");
valueRange.setRange(range);
valueRange.setValues(values);
UpdateValuesResponse response = this.mService.spreadsheets().values().update(spreadsheetId, range, valueRange)
.setValueInputOption("RAW")
.execute();
System.out.printf("%d cells updated.", response.getUpdatedCells());
}
我的问题是我试图在意图之前从onPostExecute方法调用setDataToApi方法,但它根本不起作用。非常感谢你!
答案 0 :(得分:1)
您不能从Activity外部调用另一个Activity的方法。在实际调度Intent
之前,另一个Activity尚未运行。你需要
GetBookInfo
移至SpreadSheets
活动,以便它可以直接在活动中执行onPostExecute
。这需要通过Intent
上的附加内容传递图书的ID。或... GetBookInfo
保留在MainActivity
中,并通过Intent
上的附加内容传递本书的所有详细信息。答案 1 :(得分:0)
如果您从2个不同的活动中调用了一个方法,我建议将该方法放在一个单独的类中。因此,将setDataToApi
移动到它自己的Java类中,实例化新类的对象,并在调用它的两个活动中使用该方法。
或者,正如Elan在回答中所说,使用意图并使用putExtra
将信息传递给您的其他活动,并使用onCreate
方法编写自己的逻辑来调用setDataToApi
。希望这有帮助!