2012-07-19 6 views
0

키 저장소에서 인증서를 가져 오기 위해 기본 AsyncTask를 만들려고합니다.Android AsyncTask ExceptionInIntilizationError

심지어 가장 단순한 AsyncTask도 나를 위해 작동하지 않습니다. ExceptionInIntilizationError에 대한 오류가 계속 발생합니다.

이건 그냥 기본 AsyncTask를 가공을 얻기 위해 사용하는 테스트 코드의 메신저가되어

public class Authenticator extends Activity { 

PrivateKey privateKey = null; 
String SavedAlias = ""; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    getCertificates("TEST"); 

    doSomething(); 

} 

public void doSomething() 
{ 
    new additionalStuff().execute(); 
} 

public class AliasLoader extends AsyncTask<Void, Void, X509Certificate[]> 
{ 
    X509Certificate[] chain = null; 

    @Override protected X509Certificate[] doInBackground(Void... params) { 
     android.os.Debug.waitForDebugger(); 

     if(!SavedAlias.isEmpty()) 
     { 
       try { 
        chain = KeyChain.getCertificateChain(getApplicationContext(),SavedAlias); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
       } 
     } 
     else 
     { 
      this.cancel(true); 
     } 

     return chain; 
    } 
    @Override protected void onPostExecute(X509Certificate[] chain) 
    { 
     try { 
      privateKey = KeyChain.getPrivateKey(getApplicationContext(), SavedAlias); 
     } catch (Exception e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 

     if (privateKey != null) { 
      Signature signature = null; 
      try { 
       signature = Signature.getInstance("SHA1withRSA"); 
      } catch (NoSuchAlgorithmException e) { 
       Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
      try { 
       signature.initSign(privateKey); 
      } catch (InvalidKeyException e) { 
       Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 
} 

public void getCertificates(String Host) 
{ 
    KeyChainAliasCallback callBack = new KeyChainAliasCallback() { 

     @Override 
     public void alias(String alias) { 
      if (alias != null) 
      { 
       saveAlias(alias); 
       //doSomething(); 
      } 
     } 
    }; 

    KeyChain.choosePrivateKeyAlias(this, callBack, 
    new String[] {"RSA", "DSA"}, // List of acceptable key types. null for any 
    null,      // issuer, null for any 
    null,  // host name of server requesting the cert, null if unavailable 
    443,       // port of server requesting the cert, -1 if unavailable 
    null);      // alias to preselect, null if unavailable 

} 

public void saveAlias(String alias) 
{ 
    SavedAlias = alias; 
} 

public class additionalStuff extends AsyncTask<String, String, Void> 
{ 
    String test = "This is a Test!!!"; 

    @Override 
    protected void onPreExecute() 
    { 
    } 
    @Override 
    protected Void doInBackground(String... params) { 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(String... values) 
    { 
      super.onProgressUpdate(values); 
    } 
    @Override 
    protected void onPostExecute(Void unused) 
    { 
     Log.d("DEEPAM", "THIS IS A TEST"); 
     return; 
    } 

} 
} 

왜 실패 하는가? = (

** UPDATE ** 나는 매개 변수 무효 무효 postexcecution에 @Override를 추가하고 변화를 만들어 여전히 함께 제공 같은 ExceptionInInitilizationError = (

** UPDADE **

임 내가 그것을 전에 실패 이유 아마 인 UI에 AsyncTask를 사용하여 새 스레드를 만들 수 없습니다 추측, 어쨌든이 나는 사용자가 인증서를 선택한 후에는 AsyncTask를 호출 할 수 있습니까?

+1

어쩌면 보호 된 void onPostExecute (Void Void) (매개 변수 잊음) –

+0

stacktrace를 게시 할 수 있습니까? 또한 명명 규칙에 충실하십시오. 즉, 클래스 이름에'additionalStuff' 대신'AdditionalStuff'을 사용하십시오. – Vladimir

+0

오, 나는 그것이'protected void onPostExecute (Void unused)'이어야한다고 믿는다. – Vladimir

답변

0

나는 블라디미르와 n_benbourahla가 처음에 실수를 고쳐 주었을 때 문제가 생겼을 것이라고 생각했다.

본질적으로 실행을 사용하는 약간의 코드를 추가하는 것을 잊어 버렸습니다. KeyChain.choosePrivateKeyAlias의 콜백에서 doSomething.execute()를 호출합니다.

외부에 두는 것처럼 보이고 asynctask가 정상적으로 작동합니다.

keychain.choosePrivateAlias에서 콜백 내부에서 asynctask를 호출 할 수있는 방법은 여전히 ​​문제가 있습니다. 즉, 실행 한 번만 실행해야합니다. 내가 지금 가지고있는 것으로 코드를 업데이트 할 것이다.

0

왜 onPostExecute에 태그 "@override"및 모든 매개 변수가 없습니다?