Col*_*ole 1 android android-internet
Heya - 我试图从一个在onPostExecute()中扩展AsyncTask的类调用startActivity().
这是流程:
扩展AsyncTask的类:
protected void onPostExecute() {
Login login = new Login();
login.pushCreateNewOrChooseExistingFormActivity();
}
Run Code Online (Sandbox Code Playgroud)
扩展Activity的类:
public void pushCreateNewOrChooseExistingFormActivity() {
// start the CreateNewOrChooseExistingForm Activity
Intent intent = new Intent(Intent.ACTION_VIEW);
**ERROR_HERE*** intent.setClassName(this, CreateNewOrChooseExistingForm.class.getName());
startActivity(intent);
}
Run Code Online (Sandbox Code Playgroud)
我每次都会收到这个错误:
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): FATAL EXCEPTION: main
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): java.lang.NullPointerException
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ContextWrapper.getPackageName(ContextWrapper.java:120)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.ComponentName.(ComponentName.java:62)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at android.content.Intent.setClassName(Intent.java:4850)
03-17 16:04:29.579: ERROR/AndroidRuntime(1503): at com.att.AppName.Login.pushCreateNewOrChooseExistingFormActivity(Login.java:47)
Run Code Online (Sandbox Code Playgroud)
对于iOS开发人员 - 我只是想把一个新的视图控制器推到一个导航控制器的堆栈上pushViewController:animated:.显然 - 在这个平台上很难做到.
有任何想法吗?提前致谢!
更新 - 固定:
根据@Falmarri的建议,我设法解决了这个问题.
首先,我不再打电话Login login = new Login();来创建一个新的登录对象.坏.坏.坏.没有cookie.
相反,在准备调用时.execute(),本教程(appfulcrum.com/?p=126)建议将applicationContext传递给执行AsyncTask的类,以实现我的目的,如下所示:
CallWebServiceTask task = new CallWebServiceTask();
// pass the login object to the task
task.applicationContext = login;
// execute the task in the background, passing the required params
task.execute(login);
Run Code Online (Sandbox Code Playgroud)
现在,在onPostExecute(),我可以得到我的登录对象方法,如下所示:
((Login) applicationContext).pushCreateNewOrChooseExistingFormActivity();
((Login) applicationContext).showLoginFailedAlert(result.get("httpResponseCode").toString());
...
Run Code Online (Sandbox Code Playgroud)
希望这有助于其他人!特别是iOS开发人员转向Android ...
如果Login是一个扩展的类Activity,你永远不应该Login自己创建一个新的对象,如
Login login = new Login();
Run Code Online (Sandbox Code Playgroud)
这是非常非常错误的,您应该回过头来阅读一些Android教程.
| 归档时间: |
|
| 查看次数: |
1822 次 |
| 最近记录: |