如何从Android中的MainActivity调用不同活动的方法?

时间:2017-07-20 15:25:23

标签: java android android-activity methods spreadsheet

我正在使用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方法,但它根本不起作用。非常感谢你!

2 个答案:

答案 0 :(得分:1)

您不能从Activity外部调用另一个Activity的方法。在实际调度Intent之前,另一个Activity尚未运行。你需要

  1. GetBookInfo移至SpreadSheets活动,以便它可以直接在活动中执行onPostExecute。这需要通过Intent上的附加内容传递图书的ID。或...
  2. GetBookInfo保留在MainActivity中,并通过Intent上的附加内容传递本书的所有详细信息。

答案 1 :(得分:0)

如果您从2个不同的活动中调用了一个方法,我建议将该方法放在一个单独的类中。因此,将setDataToApi移动到它自己的Java类中,实例化新类的对象,并在调用它的两个活动中使用该方法。

或者,正如Elan在回答中所说,使用意图并使用putExtra将信息传递给您的其他活动,并使用onCreate方法编写自己的逻辑来调用setDataToApi。希望这有帮助!