2016-07-19 1 views
1

사용자가 처음 등록 할 때 Twilio를 사용하여 입력 한 전화 번호로 sending SMS으로 확인하려고합니다. 내 Application 서브 클래스를 구현하지만응용 프로그램 하위 클래스가 필수 인터페이스를 구현하지만 시스템에 no가 표시됩니다.

나는 로그 캣에서 오류를 다음 얻을 LockProvider :

public class RequestActivity extends Activity { 

    private static final String EMAIL = "EMAIL"; 
    private static final String TOKEN = "TOKEN"; 
    private static final String PICTURE_URL = "PICTURE_URL"; 

    private OkHttpClient client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_request); 

     final Intent intent = getIntent(); 
     final String token = intent.getStringExtra(EMAIL); 
     String email = intent.getStringExtra(TOKEN); 
     String url = intent.getStringExtra(PICTURE_URL); 

     client = new OkHttpClient(); 

     TextView emailLabel = (TextView) findViewById(R.id.username_label); 
     emailLabel.setText(email); 
     TextView tokenLabel = (TextView) findViewById(R.id.token_label); 
     tokenLabel.setText(token); 
     ImageView profileImageView = (ImageView) findViewById(R.id.profile_image); 
     Picasso.with(this).load(url).into(profileImageView); 
     final TextView nonSecureStatus = (TextView) findViewById(R.id.non_secured_status); 
     final TextView securedStatus = (TextView) findViewById(R.id.secured_status); 

     final HttpUrl pingUrl = HttpUrl.parse(getString(R.string.sample_api_base_url)).newBuilder() 
       .addPathSegment("ping") 
       .build(); 
     final Request request = new Request.Builder() 
       .url(pingUrl) 
       .build(); 
     pingWithRequest(request, new PingCallback() { 
      @Override 
      public void onResult(boolean success) { 
       nonSecureStatus.setText(success ? R.string.tick_symbol : R.string.cross_symbol); 
       nonSecureStatus.setTextColor(getResources().getColor(success ? R.color.request_success : R.color.request_fail)); 
      } 
     }); 

     Button callButton = (Button) findViewById(R.id.call_api_button); 
     callButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       final HttpUrl pingUrl = HttpUrl.parse(getString(R.string.sample_api_base_url)).newBuilder() 
         .addPathSegment("secured") 
         .addPathSegment("ping") 
         .build(); 
       final Request request = new Request.Builder() 
         .url(pingUrl) 
         .addHeader("Bearer " + token, "Authorization") 
         .build(); 
       pingWithRequest(request, new PingCallback() { 
        @Override 
        public void onResult(boolean success) { 
         securedStatus.setText(success ? R.string.tick_symbol : R.string.cross_symbol); 
         securedStatus.setTextColor(getResources().getColor(success ? R.color.request_success : R.color.request_fail)); 
        } 
       }); 
      } 
     }); 
    } 

    private void pingWithRequest(Request request, final PingCallback callback) { 
     final Handler handler = new Handler(getMainLooper()); 
     client.newCall(request).enqueue(new Callback() { 
      @Override 
      public void onFailure(Request request, IOException e) { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         callback.onResult(false); 
        } 
       }); 
      } 

      @Override 
      public void onResponse(final Response response) throws IOException { 
       handler.post(new Runnable() { 
        @Override 
        public void run() { 
         callback.onResult(response.isSuccessful()); 
        } 
       }); 
      } 
     }); 
    } 


    private interface PingCallback { 
     void onResult(boolean success); 
    } 

    public static Intent newIntent(Context context, String email, String token, String pictureUrl) { 
     final Intent intent = new Intent(context, RequestActivity.class); 
     intent.putExtra(EMAIL, email); 
     intent.putExtra(TOKEN, token); 
     intent.putExtra(PICTURE_URL, pictureUrl); 
     return intent; 
    } 
} 

내 응용 프로그램 클래스 :

public class MyApplication extends Application implements LockProvider { 

    private Lock lock; 

    public void onCreate() { 
     super.onCreate(); 
     lock = new Lock.Builder() 
       .loadFromApplication(this) 
       .closable(true) 
       .build(); 
    } 

    @Override 
    public Lock getLock() { 
     return lock; 
    } 
} 

내 MainActivity이 내 코드는

Android Application object must implement LockProvider interface 

입니다 :

,363,210
public class MainActivity extends Activity { 

    private LocalBroadcastManager broadcastManager; 

    private BroadcastReceiver authenticationReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      UserProfile profile = intent.getParcelableExtra(Lock.AUTHENTICATION_ACTION_PROFILE_PARAMETER); 
      Token token = intent.getParcelableExtra(Lock.AUTHENTICATION_ACTION_TOKEN_PARAMETER); 
      startActivity(RequestActivity.newIntent(MainActivity.this, profile.getEmail(), token.getIdToken(), profile.getPictureURL())); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button tryButton = (Button) findViewById(R.id.try_it_button); 
     tryButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       startActivity(new Intent(MainActivity.this, LockSMSActivity.class)); 
      } 
     }); 

     broadcastManager = LocalBroadcastManager.getInstance(this); 
     broadcastManager.registerReceiver(authenticationReceiver, new IntentFilter(Lock.AUTHENTICATION_ACTION)); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     broadcastManager.unregisterReceiver(authenticationReceiver); 
    } 
} 

로그 캣 :

07-19 16:04:43.020 16817-16817/atoa.roomates E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{atoa.roomates/com.auth0.lock.sms.LockSMSActivity}: java.lang.IllegalStateException: Android Application object must implement LockProvider interface 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
     at android.app.ActivityThread.access$900(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5832) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
    Caused by: java.lang.IllegalStateException: Android Application object must implement LockProvider interface 
     at com.auth0.lock.Lock.getLock(Lock.java:314) 
     at com.auth0.lock.sms.LockSMSActivity.getLock(LockSMSActivity.java:184) 
     at com.auth0.lock.sms.LockSMSActivity.onCreate(LockSMSActivity.java:95) 
     at android.app.Activity.performCreate(Activity.java:6221) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)  
     at android.app.ActivityThread.access$900(ActivityThread.java:172)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:145)  
     at android.app.ActivityThread.main(ActivityThread.java:5832)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:372)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)  
07-19 16:04:43.225 16817-16817/atoa.roomates D/FirebaseCrashApiImpl: throwable java.lang.RuntimeException: Unable to start activity ComponentInfo{atoa.roomates/com.auth0.lock.sms.LockSMSActivity}: java.lang.IllegalStateException: Android Application object must implement LockProvider interface 
07-19 16:04:43.305 16817-16817/atoa.roomates E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: atoa.roomates, PID: 16817 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{atoa.roomates/com.auth0.lock.sms.LockSMSActivity}: java.lang.IllegalStateException: Android Application object must implement LockProvider interface 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
     at android.app.ActivityThread.access$900(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5832) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
    Caused by: java.lang.IllegalStateException: Android Application object must implement LockProvider interface 
     at com.auth0.lock.Lock.getLock(Lock.java:314) 
     at com.auth0.lock.sms.LockSMSActivity.getLock(LockSMSActivity.java:184) 
     at com.auth0.lock.sms.LockSMSActivity.onCreate(LockSMSActivity.java:95) 
     at android.app.Activity.performCreate(Activity.java:6221) 
     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119) 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611) 
     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)  
     at android.app.ActivityThread.access$900(ActivityThread.java:172)  
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)  
     at android.os.Handler.dispatchMessage(Handler.java:102)  
     at android.os.Looper.loop(Looper.java:145)  
     at android.app.ActivityThread.main(ActivityThread.java:5832)  
     at java.lang.reflect.Method.invoke(Native Method)  
     at java.lang.reflect.Method.invoke(Method.java:372)  
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)  
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 

답변

4

당신은 사용자 정의 Application 클래스를 만든하지만 당신은 당신의 AndroidManifest.xml에서에도를 연결해야합니다.

귀하의 <application> 태그

이 (당신의 MyApplication가에있는 이름을 패키지로 your_package_name 교체)처럼 될 필요가있다 :

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="<your_package_name>.MyApplication"> 

Android Developer Docs에서 발췌 :

당신은에 의해 자신의 구현을 제공 할 수 있습니다 하위 클래스를 만들고 이 하위 클래스의 정규화 된 이름을 AndroidManifest.xml의에 "android:name" 속성으로 지정합니다. 태그

관련 문제