2013-05-30 3 views
0

저는 헬퍼 클래스 생성에 대한 자습서 나 예제를 찾으려고했습니다. 내가 계속 실행하는 유일한 방법은 데이터베이스 도우미에 대한 자습서입니다. 내가 뭘하고 싶은 건 반복적 인 함수 또는 문장 등을 사용하는 대신에 ... 나는 반복적 인 코드를 포함하도록 도우미 클래스를 만들려고했지만 어떤 이유로 그것을 작동시키지 못한다. 빠른 예제를 어떻게/무엇을하려고하는지 보여줍니다.Android 함수 도우미 클래스

지금 내가 전화 할 때

public class Helper extends Activity { 

    Context ctx; 
    static SharedPreferences settings; 
    public static SharedPreferences.Editor edit; 
    public static final String PREF = "PrefTest"; 
    static boolean c; 
    static int B; 
    static String A, a, b, C, D, E, F; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settings = getSharedPreferences(PREF,MODE_PRIVATE);   
     edit = settings.edit(); 
    } 
    public static String userId() {  
     a = settings.getString("Phone", ""); 
     return a; 
    } 

    public static String pwd(){ 
     b = settings.getString("pwd", ""); 
     return b; 
    } 

    public static boolean lock(){ 
     c = settings.getBoolean("pwd", false); 
     return c; 
    } 
    public static String version(Context ctx) { 
     A = ctx.getResources().getString(R.string.version); 
     return A; 
    } 
    public static void saveUser(String user){ 
     if(user == null || user == ""){ 
      edit.putString("Phone", "User N/A"); 
      edit.commit(); 
     }else{ 
      edit.putString("Phone", user); 
      edit.commit(); 
     }  
    } 
    public static void savePwd(String D){ 
     if(D == null || D ==""){ 
      edit.putString("pwd",D); 
      edit.commit(); 
     }else{ 
      edit.putString("pwd",Error.validate(D + userId())); 
      edit.commit(); 
     }  
    } 
    public static void saveLock(boolean lock) { 
     if (lock){ 
      edit.putBoolean("Locked", true); 
      edit.commit(); 
     }else{ 
      edit.putBoolean("Locked", false); 
      edit.commit(); 
     } 
    } 
    public static int passwordCheck() { 
     if (pwd() == null || pwd() == "") { 
      B = 0; 
     } else { 
      B = 1; 
     } 
     return B; 
    } 
    public static int phoneCheck() { 
     if (userId() == null || userId() == "") { 
      B = 0; 
     } else { 
      B = 1; 
     } 
     return B; 
    } 
    public static int lockCheck() { 
     if (lock()) { 
      B = 1; 
     } else { 
      B = 0; 
     } 
     return B; 
    } 
} 

도우미 클래스 : 그리고 지금 막 다른 골목으로 실행하고 계속 보는 이유

int ab = Helper.phoneCheck(); 
     if(ab == 0){ 
      try{ 
       Helper.saveUser("TestUser"); 
      }catch(Exception e){ 
       e.printStackTrace(); 
      } 
     } 

그것은 응용 프로그램 충돌이 알아 내려고 노력에 노력하고 누군가가 나를 도와 줄 수 있다면

LogCat

05-30 01:25:11.067: D/dalvikvm(1411): GC_EXTERNAL_ALLOC freed 43K, 53% free 2551K/5379K, external 716K/1038K, paused 125ms 
05-30 01:25:11.237: D/AndroidRuntime(1411): Shutting down VM 
05-30 01:25:11.237: W/dalvikvm(1411): threadid=1: thread exiting with uncaught exception (group=0x40015560) 
05-30 01:25:11.277: E/AndroidRuntime(1411): FATAL EXCEPTION: main 
05-30 01:25:11.277: E/AndroidRuntime(1411): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.prefapp/com.test.prefapp.StartUp}: java.lang.NullPointerException 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.os.Looper.loop(Looper.java:123) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at dalvik.system.NativeStart.main(Native Method) 
05-30 01:25:11.277: E/AndroidRuntime(1411): Caused by: java.lang.NullPointerException 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at com.test.prefapp.Helper.userId(Helper.java:51) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at com.test.prefapp.Helper.phoneCheck(Helper.java:194) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at com.test.prefapp.StartUp.onCreate(StartUp.java:44) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-30 01:25:11.277: E/AndroidRuntime(1411):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
+0

발생 원인 : java.lang.NullPointerException 05-30 01 : 25 : 11.277 : E/AndroidRuntime (1411) : at com.test.prefapp.Helper.userId (Helper.java:51) 어떤 이유로 ID가 null입니다. – cerkiewny

+0

나는 그것 때문에 oncreate 메서드 – acrichm

+0

외부의 함수를 가지고 있기 때문에 궁금하네요.이 주석보다, 어쩌면 사용자 ID가 const이므로 컴파일러가 프로그램 시작시이 데이터를 설정하기로 결정했습니다. helper.java 클래스? – cerkiewny

답변

1

헬프 및 시작이라는 두 가지 활동이있는 것 같습니다. 그리고 Startup.onCreate에서 Helper.phoneCheck를 호출하는 것으로 보입니다. Helper.onCreate()에서 초기화되는 설정 :

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     settings = getSharedPreferences(PREF,MODE_PRIVATE);   
     edit = settings.edit(); 
    } 

나는 안드로이드 프레임 워크는 Startup.onCreate를 호출 할 때, 도우미 활동이 아직 시작되지 않았 음을 생각한다. 따라서 Helper.onCreate가 호출되지 않았고 설정이 아직 초기화되지 않았을 것입니다.

나머지 코드를 보지 않고 가능한 해결책을 추측 할 수 있습니다. Startup을 Activity 대신 Helper에서 확장되도록 변경하는 방법은 어떻습니까?

public class Startup extends Helper { 

    public void onCreate() { 
     super.onCreate(); // This will initialize Helper.settings 
     ... 
     int ab = Helper.phoneCheck(); 

    } 
} 

이렇게하면 Helper.settings를 사용할 때까지 초기화된다는 것을 보장 할 수 있습니다. 또한 다른 활동도 도우미를 확장하고 그 방법을 재사용 할 수 있습니다.

+0

굉장해, 고마워. 나는 그것을 전혀 생각하지 않았다 ... 그것은 내가 그것을 원했던 방식으로 지금 완벽하게 작동한다. 왜 항상 가장 간단한 것들이 나를 우스꽝스럽게합니다. 당신의 도움에 다시 한번 감사드립니다. – acrichm