android - 更新Android SDK工具后无法运行应用程序

标签 android eclipse sdk android-fragmentactivity

当我将 Android SDK 工具更新到版本 22.0.1 时,我无法再运行我的应用程序。 我启动应用程序并收到此错误:

06-19 20:44:47.297: D/AndroidRuntime(370): Shutting down VM
06-19 20:44:47.337: E/AndroidRuntime(370): FATAL EXCEPTION: main
06-19 20:44:47.337: E/AndroidRuntime(370): java.lang.RuntimeException: Unable to   instantiate activity      ComponentInfo{com.android.app.dictionary/com.android.app.dictionary.activity.MainActivity}: java.lang.ClassNotFoundException: com.android.app.dictionary.activity.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.app.dictionary-2.apk]
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.os.Looper.loop(Looper.java:123)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.reflect.Method.invokeNative(Native Method)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.reflect.Method.invoke(Method.java:521)
06-19 20:44:47.337: E/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-19 20:44:47.337: E/AndroidRuntime(370):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-19 20:44:47.337: E/AndroidRuntime(370):  at dalvik.system.NativeStart.main(Native Method)
06-19 20:44:47.337: E/AndroidRuntime(370): Caused by: java.lang.ClassNotFoundException: com.android.app.dictionary.activity.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.android.app.dictionary-2.apk]
06-19 20:44:47.337: E/AndroidRuntime(370):  at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:243)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.ClassLoader.loadClass(ClassLoader.java:573)
06-19 20:44:47.337: E/AndroidRuntime(370):  at java.lang.ClassLoader.loadClass(ClassLoader.java:532)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
06-19 20:44:47.337: E/AndroidRuntime(370):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
06-19 20:44:47.337: E/AndroidRuntime(370):  ... 11 more
06-19 20:44:56.478: I/Process(370): Sending signal. PID: 370 SIG: 9
06-19 20:52:36.868: W/dalvikvm(400): Unable to resolve superclass of Lcom/android/app/dictionary/activity/MainActivity; (31)
06-19 20:52:36.868: W/dalvikvm(400): Link of class 'Lcom/android/app/dictionary/activity/MainActivity;' failed
06-19 20:52:36.898: D/AndroidRuntime(400): Shutting down VM
06-19 20:52:36.898: W/dalvikvm(400): threadid=1: thread exiting with uncaught exception (group=0x4001d800)

这是我的主课:

public class DetailtFragment extends Fragment implements OnClickListener {
static Button btnAdd, btnListen, btnView, btnGame, btnGame2;
FragmentActivity activity;
static TextView tvWord, tvDetailt;
static Context mContext;
static ImageView imgView;
static File cacheDir, mp3;
static Bitmap bmp;
MediaPlayer mediaPlayer;
static Handler mHandler = new Handler();
boolean firstRun = true;

static SharedPreferences preferences;

public static Fragment newInstance(Context context) {
    DetailtFragment f = new DetailtFragment();
    return f;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);
    activity = getActivity();
    mContext = activity;
}

@Override
public void onAttach(Activity activity) {
    // TODO Auto-generated method stub
    super.onAttach(activity);
    mediaPlayer = new MediaPlayer();

    String newFolder = "/dictionary";
    String extStorageDirectory = Environment.getExternalStorageDirectory()
            .toString();
    cacheDir = new File(extStorageDirectory + newFolder);
    if (!cacheDir.exists()) {
        cacheDir.mkdir();
    }
    preferences = activity.getSharedPreferences(Constants.PREF, 0);

}

@Override
public void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    if (!firstRun) {
        return;
    }
    String saved_word = preferences.getString(Constants.PREF_WORD, "");
    if (saved_word.trim().length() > 0) {
        WordDatabase db = new WordDatabase(activity);
        db.open();
        WordDTO saved_word_dto = db.getByName(saved_word);
        showWordDetailt(saved_word_dto);
        db.close();
    }
    firstRun = false;
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    ViewGroup root = (ViewGroup) inflater.inflate(R.layout.detailt, null);
    btnAdd = (Button) root.findViewById(R.id.btnAddNew);
    btnListen = (Button) root.findViewById(R.id.btnListen);
    tvWord = (TextView) root.findViewById(R.id.tvWord);
    tvDetailt = (TextView) root.findViewById(R.id.tvDetailt);
    imgView = (ImageView) root.findViewById(R.id.imgDetailt);
    btnView = (Button) root.findViewById(R.id.btnView);
    btnGame = (Button) root.findViewById(R.id.btnGame);
    btnGame2 = (Button) root.findViewById(R.id.btnGame2);

    btnAdd.setOnClickListener(this);
    btnListen.setOnClickListener(this);

    btnView.setOnClickListener(this);
    btnGame.setOnClickListener(this);
    btnGame2.setOnClickListener(this);
    return root;
}

public static void showWordDetailt(WordDTO word) {
    if (word == null) {
        return;
    }

    Constants.word = word;
    if (preferences != null) {
        Editor edit = preferences.edit();
        edit.putString(Constants.PREF_WORD, word.getWord());
        edit.commit();
    }

    final String name;
    String pronunce, mean, type, msg;
    String br = "<br>";
    String tab = "&emsp;";
    String mean1, mean2, mean3, mean4, mean5;
    pronunce = word.getPronunce();
    mean = word.getMean();
    type = word.getType();
    name = word.getWord();
    mean1 = word.getMean1();
    mean2 = word.getMean2();
    mean3 = word.getMean3();
    mean4 = word.getMean4();
    mean5 = word.getMean5();

    tvWord.setText(name);
    msg = "";

    if (pronunce != null && pronunce.trim().length() > 0) {
        msg = "<b>Phát âm:</b>" + br + tab + pronunce + br + br;
    }
    msg += "<b>Loại từ:</b>" + br + tab + type + br + br;
    msg += "<b>Nghĩa:</b>" + br + tab + "- " + mean;

    if (mean1 != null) {
        msg += br + tab + "- " + mean1;
    }
    if (mean2 != null) {
        msg += br + tab + "- " + mean2;
    }
    if (mean3 != null) {
        msg += br + tab + "- " + mean3;
    }
    if (mean4 != null) {
        msg += br + tab + "- " + mean4;
    }
    if (mean5 != null) {
        msg += br + tab + "- " + mean5;
    }

    tvDetailt.setText(Html.fromHtml(msg));

    btnListen.setEnabled(false);
    imgView.setImageDrawable(mContext.getResources().getDrawable(
            R.drawable.default_image));

    new Thread(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            getImageAndSoundFromResource(name);
        }

    }).start();
}

private static void getImageAndSoundFromResource(String wordname) {
    // TODO Auto-generated method stub
    Context context = mContext.getApplicationContext();
    InputStream imageIs = null;
    InputStream soundIs = null;
    try {
        imageIs = context.getResources().getAssets()
                .open(wordname + ".jpg");
        soundIs = context.getResources().getAssets()
                .open(wordname + ".mp3");
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    if (imageIs != null) {
        try {
            bmp = BitmapFactory.decodeStream(imageIs);
            setImage(bmp);

        } catch (NotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    if (soundIs != null) {
        try {
            byte[] soundBytes = convertInputStreamToByteArray(soundIs);
            try {
                if (mp3 != null && mp3.exists()) {
                    mp3.delete();
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            // create temp file that will hold byte array
            mp3 = File.createTempFile(wordname, "mp3", cacheDir);
            mp3.deleteOnExit();
            FileOutputStream fos = new FileOutputStream(mp3);
            fos.write(soundBytes);
            fos.close();

            setEnableButton(true);

        } catch (IOException ex) {
            ex.printStackTrace();
            setEnableButton(false);
        }
    }
}

private static byte[] convertInputStreamToByteArray(InputStream is)
        throws IOException {
    ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    int nRead;
    byte[] data = new byte[16384];

    while ((nRead = is.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }

    buffer.flush();

    return buffer.toByteArray();
}

private static void setImage(final Bitmap bmp) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            if (bmp != null) {
                imgView.setImageBitmap(bmp);
            }
        }
    });
}

private static void setEnableButton(final boolean enabled) {
    mHandler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            btnListen.setEnabled(enabled);
        }
    });
}

private void playSound(File mp3) {
    if (mp3 == null){
        return;
    }
    try {
        FileInputStream fis = new FileInputStream(mp3);
        mediaPlayer.reset();
        mediaPlayer.setDataSource(fis.getFD());

        mediaPlayer.prepare();
        mediaPlayer.start();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
public void onDestroy() {
    // TODO Auto-generated method stub
    super.onDestroy();
    try {
        if (mp3 != null && mp3.exists()) {
            mp3.delete();
        }
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    int id = v.getId();
    switch (id) {
    case R.id.btnAddNew:
        Intent addIntent = new Intent(mContext, AddNewWordActivity.class);
        mContext.startActivity(addIntent);
        break;
    case R.id.btnListen:
        playSound(mp3);
        break;
    case R.id.btnView:
        if (Constants.word != null) {
            Intent detailtIntent = new Intent(mContext,
                    Detailt2Activity.class);
            mContext.startActivity(detailtIntent);
        }
        break;
    case R.id.btnGame:
        List<WordDTO> list = MainActivity.getStarredList();
        if (list.size() >= 5) {
            Intent gameIntent = new Intent(mContext, GameActivity.class);
            mContext.startActivity(gameIntent);
        } else {
            AlertDialog.Builder bl = new AlertDialog.Builder(mContext);
            bl.setMessage(getString(R.string.alert_less_than_5));
            bl.setNeutralButton(getString(android.R.string.ok),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            // TODO Auto-generated method stub

                        }
                    });

            bl.show();
        }
        break;

    case R.id.btnGame2:
        List<WordDTO> list2 = MainActivity.getStarredList();
        if (list2.size() >= 5) {
            Intent gameIntent = new Intent(mContext,
                    GameReverseActivity.class);
            mContext.startActivity(gameIntent);
        } else {
            AlertDialog.Builder bl = new AlertDialog.Builder(mContext);
            bl.setMessage(getString(R.string.alert_less_than_5));
            bl.setNeutralButton(getString(android.R.string.ok),
                    new DialogInterface.OnClickListener() {

                        @Override
                        public void onClick(DialogInterface arg0, int arg1) {
                            // TODO Auto-generated method stub

                        }
                    });

            bl.show();
        }
        break;
    default:
        break;
    }
}

}

我使用的是 SDK 工具版本 22.0.1 和 Eclipse Juno 4.2.2 感谢您的帮助。

最佳答案

右键单击您的项目,单击 Java Build Path,然后在 Order and Export 下确保还选中 Android Private Libraries

然后清理您的项目并尝试再次运行。

enter image description here

关于android - 更新Android SDK工具后无法运行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17203739/

相关文章:

android - ListView 页脚仅在首先选择 listview 项后可选择

java - Eclipse 跟踪。最佳实践是什么?如何获取 DebugTrace 实例?

java - 同时来自多台计算机/用户的 Eclipse?

xml - 输入xml开始标签时自动添加结束标签?

android - 使用适用于 Android 的 Qualcomm AR SDK 对标记进行远程跟踪

android - 如何在保留字符状态的情况下向自动完成 TextView 动态添加建议

android - Firestore - 获取子集合的父文档

iphone - 以编程方式更改 iOS 锁屏

iPhone 设备 iOS 4.3.5 在使用 [NSDate date] 模拟器时返回 1970 而不是当前日期

android - Google Play 开发者更改本国货币