我試圖創建一個基本的AsyncTask從密鑰存儲區獲取證書。Android AsyncTask ExceptionInIntilizationError
由於某種原因,即使是最簡單的AsyncTask也不適用於我,我不斷收到有關ExceptionInIntilizationError的錯誤。
這是使用只得到一個基本的AsyncTask工作的測試代碼IM:
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;
}
}
}
爲什麼會失敗? =(
**更新** 我所做的更改添加對postexcecution的@覆蓋和參數虛空虛空,它仍然出現相同ExceptionInInitilizationError =(
** ** UPDADE
林猜我不能創建在用戶界面中,這可能是爲什麼它之前沒有使用的AsyncTask一個新的線程,反正是有,我可以得到一旦用戶選擇了證書的AsyncTask被稱爲?
也許保護無效onPostExecute(Void Void)(忘記參數) – 2012-07-19 15:23:26
你可以發佈stacktrace嗎?另外,請遵守命名約定,即使用'AdditionalStuff'而不是'additionalStuff'作爲類名。 – Vladimir 2012-07-20 08:34:05
哦,我相信它應該是'保護無效onPostExecute(空白未使用)' – Vladimir 2012-07-20 08:35:31