簡體   English   中英

如何在Android中調用與MainActivity不同的活動的方法?

[英]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尚未運行。 你要么需要

  1. GetBookInfo移到SpreadSheets活動,以便它可以直接在活動中執行onPostExecute 這需要通過Intent上的附加內容傳遞書的ID。 要么...
  2. GetBookInfo保留在MainActivity並通過Intent上的其他GetBookInfo傳遞所有已查找的書籍詳細信息。

如果您從2個不同的活動中調用一個方法,則建議將該方法放在單獨的類中。 因此,將setDataToApi移到它自己的Java類中,實例化新類的對象,然后在調用它的兩個活動中都使用該方法。

或者,如Elan在回答中所說,使用putExtra並使用putExtra將信息傳遞給其他活動,並在onCreate方法中編寫自己的邏輯以調用setDataToApi 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM