키 저장소에서 인증서를 가져 오기 위해 기본 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를 호출 할 수 있습니까?
어쩌면 보호 된 void onPostExecute (Void Void) (매개 변수 잊음) –
stacktrace를 게시 할 수 있습니까? 또한 명명 규칙에 충실하십시오. 즉, 클래스 이름에'additionalStuff' 대신'AdditionalStuff'을 사용하십시오. – Vladimir
오, 나는 그것이'protected void onPostExecute (Void unused)'이어야한다고 믿는다. – Vladimir