2011-03-17 2 views
1

Heya - onPostExecute()에서 AsyncTask를 확장하는 클래스에서 startActivity()를 호출하려고합니다.인스턴스 메서드 내에서 startActivity()를 호출하면 NullPointerException이 발생합니다.

클래스 AsyncTask를 확장 :

protected void onPostExecute() { 
    Login login = new Login(); 
    login.pushCreateNewOrChooseExistingFormActivity(); 
} 

클래스 활동 확장 : 여기

이 흐름의

public void pushCreateNewOrChooseExistingFormActivity() { 
    // start the CreateNewOrChooseExistingForm Activity 
    Intent intent = new Intent(Intent.ACTION_VIEW); 
    **ERROR_HERE*** intent.setClassName(this, CreateNewOrChooseExistingForm.class.getName()); 
    startActivity(intent); 
} 

을 그리고 난이 오류가 ... 때마다 :

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) 

iOS 용 evelopers - 난 그냥 탐색 컨트롤러의 스택에 새보기 컨트롤러를 밀어하려고 오전 pushViewController:animated:. 분명히 -이 플랫폼에서하기가 어렵습니다.

아이디어가 있으십니까? 미리 감사드립니다!

UPDATE - 고정 : @Falmarri 조언 당

, 내가이 문제를 해결 할 수 있었다.

우선, 나는 더 이상 Login login = new Login();을 호출하여 새 로그인 개체를 만들지 않습니다. 나쁜. 나쁜. 나쁜. 쿠키가 없습니다. .execute()를 호출하는 경우 대신

,이 가이드 (appfulcrum.com/?p=126)는 클래스 애플리케이션 컨텍스트 전달 제안하는 실행 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); 

지금 onPostExecute()에, 난 내 로그인을 얻을 수있는 것은 그래서 같은 방법을 객체 :

 ((Login) applicationContext).pushCreateNewOrChooseExistingFormActivity(); 
     ((Login) applicationContext).showLoginFailedAlert(result.get("httpResponseCode").toString()); 
     ... 

희망이 다른 거기에 사람을하는 데 도움이! 안드로이드에 이상 transistioning 특히 아이폰 OS 개발자 ... Login 만약

+0

'AndroidManifest.xml'에 활동을 선언 했습니까? – Malcolm

+0

Android! = iPhone Android 기본 사항 (예 : 활동)에 대한 설명이있는 Android 기초를 읽고 이해했는지 확인하십시오. 네비게이션 컨트롤러 또는 뷰 컨트롤러의 개념은 없습니다. 그렇다고해서 아이폰처럼 다른 것을 시도하는 것이 어렵다는 것을 의미하지는 않습니다. http://developer.android.com/guide/topics/fundamentals.html –

+0

@Malcolm, 예 : ... ... @Mayra, 할거야 - 다시 드로잉 보드에! – Cole

답변

5

당신은 결코 자신과 같은

Login login = new Login(); 

이 매우하는 새로운 Login 객체를 생성하지, 지금, 지금,해야한다, Activity를 확장하는 클래스입니다 , 아주 틀렸어. 돌아와서 안드로이드 튜토리얼을 따라 가야한다.

+0

메모를 잘 찍었습니다. 감사! – Cole

+0

나는이 튜토리얼을 따라했다. (새로운 Login 객체를 만드는 것에 대한 나의 훌륭한 아이디어는 빼고 - 그건 내 목표이다. http://appfulcrum.com/?p=126 btnCallWebService.setOnClickListener()의 13 번째 라인이 무엇인지 설명해 주시겠습니까? 그 게시물에 대해 물어볼 것이지만 코멘트는 닫혀 있습니다. 미리 감사드립니다. – Cole

+0

'Start.this'는 현재 시작 활동에 대한 참조입니다. Activity가 Context를 확장하기 때문에, 그 행은 안드로이드의 대부분의 것들에 필요한 활동의 ​​컨텍스트에 대한 참조를 저장하는 것입니다. – Falmarri