startActivityForResult()
只能從真實的屏幕上活動中獲得,因爲它是活動中的一種方法。請重新設計您的應用程序,以便從活動中驅動用戶界面。另一方面,如果您的非Activity類是通過屏幕上的Activity初始化並使用的,則可以將該Activity的實例作爲構造函數中的參數傳遞給您的類,並使用它來啓動其他Activities。
但要小心。使用這種方法會增加內存泄漏的風險,因爲外部類(在我的示例中爲Utils)可能會保留對Activity的引用,即使它已經消失。
如果您只想訪問數據,那麼您可以嘗試將其寫入SharedPreferences或數據庫或某些文件,然後使用應用程序上下文(通過構造函數再次傳入)來讀取它。這可以降低內存泄漏的風險。類似:
MyApiClass myApiClass = new MyApiClass(getApplicationContext());
示例代碼
主要活動:
public class Main extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utils util = new Utils(this);
util.startTest();
}
@Override
protected void onActivityResult(int arg0, int arg1, Intent arg2) {
Toast.makeText(this, "onActivityResult called", Toast.LENGTH_LONG).show();
super.onActivityResult(arg0, arg1, arg2);
}
}
的Utils類(其啓動爲結果):
public class Utils {
Activity activity;
public Utils(Activity ac) {
activity = ac;
}
public void startTest() {
Intent i = new Intent(activity, Test.class);
activity.startActivityForResult(i, 1);
}
}
測試活動:
public class Test extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Toast.makeText(this, "Test", Toast.LENGTH_LONG).show();
this.setResult(Activity.RESULT_OK);
this.finish();
}
}
startActivityForResult方法不能從非活動類工作監守我們只能在活動 –
@ρяσѕρєяK我只是想它覆蓋onActivityresult,它工作正常。讓我發佈一些示例代碼。 –
感謝您的回覆。使用非活動類的基本原因是我想將整個過程封裝到一個類(API)中,那麼任何想使用此類的人都可以調用它的API。該API執行一系列步驟,其中一些涉及以活動形式從用戶處獲取數據。即使我們忘記了startActivityForResult,我所需要的是來自非活動類中的活動的數據是這種情況在android中不是有效的嗎? – user1950373