2011-12-29 9 views
0

次のコードをAndroid 2.1環境で実行するとクラッシュします。次のコードは、平文文字列をMD5に変換する関数です。文字列はtestとしてハードコードされています。それは次のような結果を印刷する必要があります:098f6bcd4621d373cade4e832627b4f6Android MD5の実装がクラッシュする

package md5.android; 

import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 
import java.util.ArrayList; 
import java.util.Collections; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 

public class md5android extends Activity { 

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

     String s = "test"; 
     String res = md5(s); 
     TextView tv = new TextView(this); 
     tv.setText(res); 
     setContentView(tv); 
    } 

    public String md5(String s) { 
     try { 
      MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); 
      digest.update(s.getBytes()); 
      byte messageDigest[] = digest.digest(); 

      StringBuffer hexString = new StringBuffer(); 
      for (int i=0; i<messageDigest.length; i++) 
       hexString.append(Integer.toHexString(0xFF & messageDigest[i])); 

      return hexString.toString(); 

     } 
     catch (NoSuchAlgorithmException e) { 
      e.printStackTrace(); 
     } 
     return ""; 
    } 

} 

スタックトレース:

Thread [<3> main] (Suspended (exception RuntimeException))  
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2417  
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) line: 2512  
ActivityThread.access$2200(ActivityThread, ActivityThread$ActivityRecord, Intent) line: 119  
ActivityThread$H.handleMessage(Message) line: 1863  
ActivityThread$H(Handler).dispatchMessage(Message) line: 99  
Looper.loop() line: 123  
ActivityThread.main(String[]) line: 4363  
Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
Method.invoke(Object, Object...) line: 521  
ZygoteInit$MethodAndArgsCaller.run() line: 860  
ZygoteInit.main(String[]) line: 618  
NativeStart.main(String[]) line: not available [native method] 

エラーログ:

http://pastebin.com/dHXHe9SC

+2

素晴らしいです、それはクラッシュします...スタックトレースはどうですか?私のクリスタルボールが故障しています... – WarrenFaith

+1

ログメッセージは非常に参考になります..エラーログも添付してください! – Abhinava

+0

それについて申し訳ありません – joshdeco

答えて

2

このコードは正常に動作する必要があります。ログから判断すると、アクティビティクラス名がAndroidManifest.xmlで宣言したものと一致しないという問題があります。 Androidはアクティビティmd5.android.Md5androidActivityを読み込もうとしますが、実際のアクティビティはmd5.android.md5androidです。

md5androidクラスの名前をMd5androidActivityに変更すると、マニフェストの内容と一致するため、クラッシュが消えるはずです。

+0

クラスをMd5androidActivityに名前を変更しましたが、それでもクラッシュします。この同じmd5クラスは、別のプロジェクトに挿入するとプロジェクトがクラッシュします(そうでなければうまくいくでしょう)。 – joshdeco

+0

マニフェストの問題を修正した後、クラッシュのスタックトレースはどのように見えますか?それでも "アクティビティをインスタンス化できません:java.lang.ClassNotFoundException"が表示された場合、マニフェストの外観はどうなりますか? –

関連する問題