29

さて、私は本当にここで立ち往生しています。何をすればいいのかわからない、どこに行けばいいのかわからない!

SDK と Eclipse の両方のバージョンをアンインストール、再インストールしようとしましたが、これを Google で調べてみましたが、何もありません!!!

エミュレーターでアプリを実行できますが、エクスポートできません...

[2011-10-07 16:35:30 - Dex Loader] dex を実行できません: 複数の dex ファイルで Lcom/dreamhawk/kalori/DataBaseHelper が定義されています。

これはdataBaseHelperです

package com.dreamhawk.kalori;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;



public class DataBaseHelper extends SQLiteOpenHelper {

    // The Android's default system path of your application database.
    private static String DB_PATH = "/data/data/com.dreamhawk.kalori/databases/";

    private static String DB_NAME = "livsmedel_db";
    private DataBaseHelper myDBHelper;
    private SQLiteDatabase myDb;

    private final Context myContext;

    private static final String DATABASE_TABLE = "Livsmedel";
    public static String DB_FILEPATH = "/data/data/com.dreamhawk.kalori/databases/lifemedel_db";
    public static final String KEY_TITLE = "Namn";
    public static final String KEY_BODY = "Kcal";
    public static final String KEY_ROWID = "_id";
    private static final int DATABASE_VERSION = 2;

    /**
     * Constructor Takes and keeps a reference of the passed context in order to
     * access to the application assets and resources.
     * 
     * @param context
     */
    public DataBaseHelper(Context context) {

        super(context, DB_NAME, null, 1);
        this.myContext = context;

        // checking database and open it if exists
        if (checkDataBase()) {
            openDataBase();
        } else {
            try {
                this.getReadableDatabase();
                createDatabase();
                this.close();
                openDataBase();

            } catch (IOException e) {
                throw new Error("Error copying database");
            }
            Toast.makeText(context, "Livsmedelsdatabasen importerad",
                    Toast.LENGTH_LONG).show();
        }

    }

    private boolean checkDataBase() {
        SQLiteDatabase checkDB = null;
        boolean exist = false;
        try {
            String dbPath = DB_PATH + DB_NAME;
            checkDB = SQLiteDatabase.openDatabase(dbPath, null,
                    SQLiteDatabase.OPEN_READONLY);
        } catch (SQLiteException e) {
            Log.v("db log", "database does't exist");
        }

        if (checkDB != null) {
            exist = true;
            checkDB.close();
        }
        return exist;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // db.execSQL(DATABASE_CREATE);
    }

     @Override
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

           Log.w("Kalori", "Upgrading database from version " + oldVersion + " to "
               + newVersion + ", which will destroy all old data");
           db.execSQL("DROP TABLE IF EXISTS Livsmedel");
           onCreate(db);

       }

    public DataBaseHelper open() throws SQLException {
        myDBHelper = new DataBaseHelper(myContext);
        myDb = myDBHelper.getWritableDatabase();
        return this;
    }

    public void createDatabase() throws IOException {

        InputStream assetsDB = myContext.getAssets().open("livsmedel_db");
        // OutputStream dbOut = new FileOutputStream(DB_PATH);
        String outFileName = DB_PATH + DB_NAME;
        OutputStream dbOut = new FileOutputStream(outFileName);

        Log.d("DH", "index=" + assetsDB);
        byte[] buffer = new byte[1024];
        int length;
        while ((length = assetsDB.read(buffer)) > 0) {
            dbOut.write(buffer, 0, length);
        }

        dbOut.flush();
        dbOut.close();
        assetsDB.close();
    }

    public Cursor fetchAllNotes() {

        return myDb.query(DATABASE_TABLE, new String[] { KEY_ROWID, KEY_TITLE,
                KEY_BODY }, null, null, null, null, null);
    }

    public void openDataBase() throws SQLException {
        String dbPath = DB_PATH + DB_NAME;
        myDb = SQLiteDatabase.openDatabase(dbPath, null,
                SQLiteDatabase.OPEN_READWRITE);
    }

}

私は疑う:

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

でもどうしたらいいのかわからない…助けてください!!! :'(

4

17 に答える 17

57

bin/dexedLibs にファイルがあります libs に同じファイルが存在します

ライブラリで削除すると、動作するはずです。

私にとっては、android-support-v4.jar でした。

お役に立てれば

于 2012-12-09T00:22:39.243 に答える
8
  1. Eclipseを再起動し、
  2. bin&genフォルダを削除して
  3. 最後に、プロジェクトをクリーンアップして、再度ビルドします。

これは私のために働いた..:)

于 2012-06-26T16:27:30.637 に答える
7

Help->Check今日 ( 2011 年 10 月 21 日) に(更新のために) Eclipse を更新しましたが、エラーは表示されません。その前にエラー " Unable to execute dex: Multiple dex files define" がありました。お役に立てれば。

于 2011-10-21T09:14:15.103 に答える
6

問題が解決しました。

アップグレードする前は、App1、App2、Libの3つのAndroidプロジェクトがありました。LibはAndroidライブラリプロジェクトであり、App1とApp2がそれを使用します。

ADTとSDKの両方をアップグレードした後、次のようなエラーが発生しました

[2012-12-05 15:54:10 - Dex Loader] Unable to execute dex: Multiple dex files define Lxxx;
[2012-12-05 15:54:10 - TrailGuide] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lxxx;

解決策は、App1とApp2の両方で「Lib_src」というフォルダーを削除することでした。

于 2012-12-05T15:04:46.717 に答える
4

これは、同じライブラリのコピーが 2 つあったときに発生しました (Android サポート ライブラリ バージョン 4 の 2 つの異なるリビジョンがありました)。それらの1つを削除すると、プロジェクトがコンパイルされ、実行できました。ダン

于 2013-10-30T21:34:45.243 に答える
1

次の手順を試してください:「プロジェクト->自動的にビルド」オプションを無効にしてから、「クリーン」および「ビルド」プロジェクトを実行してみてください。私のために働きます。「自動ビルド」オプションをオンに戻すことができます

于 2011-10-20T03:05:03.783 に答える
1

「複数のdexファイルが定義されています」というメッセージも表示されました。R14 のいくつかの変更について読んだ後、プロジェクトの bin ディレクトリを削除し、上記の @abbandon の説明に従ってプロジェクトをクリーンアップして再構築し、Eclipse を再起動しました。これらの手順で問題が解決しました。

于 2011-10-25T05:20:01.940 に答える
1

私にとっては、この問題が発生したときに Android Studio を使用していました。Google Admob と Analytics の外部 SDK を使用していました。

現在、競合の原因となっている kitkat SDK でそれらを出荷しています。解決策は、project.iml ファイルを開いて次の行を削除することでした。

<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$USER_HOME$/Downloads/Ads/lib/amazon-ads-4.0.9.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>
<orderEntry type="module-library">
  <library>
    <CLASSES>
      <root url="jar://$USER_HOME$/Downloads/Folx/application/GoogleAdMobAdsSdk-6.2.1/Add-ons/googleanalyticsandroid/libGoogleAnalyticsV2.jar!/" />
    </CLASSES>
    <JAVADOC />
    <SOURCES />
  </library>
</orderEntry>

それが役立つことを願って、気をつけて..

于 2014-03-20T16:46:40.793 に答える
0

私の場合、libs フォルダーに 2 つの異なる jar ファイルが含まれていました。

それらの1つを削除して問題を解決しました。

于 2013-09-26T12:18:18.820 に答える
0

別のプロジェクトからサポート jar をインポートする場合は、[注文とエクスポート] で *Java Build Path * に移動する必要があります。サポート jar をクリックして、依存関係を再構築したプロジェクトの上に置きます。

于 2014-07-30T08:36:42.350 に答える
0

Cordova では、libs フォルダーに、ビルド パスで設定したファイルがあります。私はコルドバを更新し、jar ファイルを更新しましたが、libs フォルダー内の古い jar ファイルを削除するのを忘れています。古いものを削除すると、プロジェクトは魅力的に機能しました!

于 2014-09-19T05:09:03.580 に答える
0

プロジェクトの Libs フォルダーを削除し、新しい Lib_src フォルダー、jar を再度インポートします。プロジェクトを右クリック->ビルドパス->ビルドパスを設定し、Libsフォルダーを選択して[削除]をクリックし、[フォルダーの追加]ボタンをクリック-> Lib_srcを選択-> OK

于 2015-03-12T09:49:49.937 に答える
0

ここでの提案はどれも解決しませんでした。これは私がそれを修正した方法でした:

3行目の /proj.android/jni/Application.mk ファイル内では、「mips」でビルドするように指定していました。これを APP_ABI:=armeabi-v7a に変更して、ビルド済みのすべてのライブラリを正しく検出できるようにしました。

于 2015-02-05T13:21:53.867 に答える