[英]How to call a method of a different activity from MainActivity in Android?
我正在使用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方法,但它根本不起作用。 非常感謝你!
您不能從該活動外部調用另一個活動的方法。 在實際分派Intent
之前,另一個Activity尚未運行。 你要么需要
GetBookInfo
移到SpreadSheets
活動,以便它可以直接在活動中執行onPostExecute
。 這需要通過Intent
上的附加內容傳遞書的ID。 要么... GetBookInfo
保留在MainActivity
並通過Intent
上的其他GetBookInfo
傳遞所有已查找的書籍詳細信息。 如果您從2個不同的活動中調用一個方法,則建議將該方法放在單獨的類中。 因此,將setDataToApi
移到它自己的Java類中,實例化新類的對象,然后在調用它的兩個活動中都使用該方法。
或者,如Elan在回答中所說,使用putExtra
並使用putExtra
將信息傳遞給其他活動,並在onCreate
方法中編寫自己的邏輯以調用setDataToApi
。 希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.