0

携帯電話でアプリを開いて確認するたびに、開いた瞬間に閉じて、「「アプリの名前」が停止しました」と表示されます

メインレイアウトに移動することなく自動終了するだけです

ps tnx 助けてください!

デバッグは言う:

対象デバイス: 54d1969c APK のインストール: C:\Users\Erel\AndroidStudioProjects\AccountSaver\app\build\outputs\apk\app-debug.apk ファイルのアップロード先: /data/local/tmp/com.erelbiran.accountsaver com.android .ddmlib.AdbCommandRejectedException: デバイスが許可されていません。この adb サーバーの $ADB_VENDOR_KEYS が設定されていません。間違っていると思われる場合は、'adb kill-server' を試してください。それ以外の場合は、デバイスで確認ダイアログを確認してください。

主な活動

package com.erelbiran.accountsaver;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {


    DB myDB;
    Button btnAdd;
    EditText User = (EditText)findViewById(R.id.EnterUser), Pass = (EditText)findViewById(R.id.EnterPass), Acc = (EditText)findViewById(R.id.EnterAcc);

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        openDB();
        btnAdd.setOnClickListener(
                new View.OnClickListener()
                {
                public void onClick(View view) {
                    myDB.insertRow(User.getText().toString(), Pass.getText().toString(), Acc.getText().toString());
                    Toast.makeText(MainActivity.this, "Account Added!", Toast.LENGTH_SHORT).show();
                }}
                 );




    }
    private void openDB(){
        myDB = new DB(this);
        myDB.open();
    }
    private void closeDB(){
        myDB.close();
    }

}

メニフェスト

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.erelbiran.accountsaver">

    <application
        android:debuggable="true"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name="MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

データベース コード:

// ------------------------------------ DBADapter.java ---------------------------------------------

package com.erelbiran.accountsaver;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class DB {

    /////////////////////////////////////////////////////////////////////
    //  Constants & Data
    /////////////////////////////////////////////////////////////////////
    // For logging:
    private static final String TAG = "DBAdapter";

    // DB Fields
    public static final String KEY_ROWID = "_id";
    public static final int KEY_ACCID = 0;
    public static final String KEY_USER = "username";
    public static final String KEY_PASS = "password";
    public static final String KEY_ACC = "accounts";

    //
    // Setup fields
    public static final int COL_USER = 1;
    public static final int COL_PASS = 2;
    public static final int COL_ACC = 3;


    public static final String[] ALL_KEYS = new String[] {KEY_ROWID, KEY_USER, KEY_PASS, KEY_ACC};

    // DB info: it's name, and the table we are using (just one).
    public static final String DATABASE_NAME = "MyDb";
    public static final String DATABASE_TABLE = "mainTable";
    public static final int DATABASE_VERSION = 1;

    private static final String DATABASE_CREATE_SQL =
            "create table " + DATABASE_TABLE
                    + " (" + KEY_ACCID + " integer primary key autoincrement, "
                    + KEY_USER + " string not null, "
                    + KEY_PASS + " string not null, "
                    + KEY_ACC + " string not null"

                    // Rest  of creation:
                    + ");";

    // Context of application who uses us.
    private final Context context;

    private DatabaseHelper myDBHelper;
    private SQLiteDatabase db;

    /////////////////////////////////////////////////////////////////////
    //  Public methods:
    /////////////////////////////////////////////////////////////////////

    public DB(Context ctx) {
        this.context = ctx;
        myDBHelper = new DatabaseHelper(context);
    }

    // Open the database connection.
    public DB open() {
        db = myDBHelper.getWritableDatabase();
        return this;
    }

    // Close the database connection.
    public void close() {
        myDBHelper.close();
    }

    // Add a new set of values to the database.
    public long insertRow(String username   , String password  , String account) {
        ContentValues initialValues = new ContentValues();
        initialValues.put(KEY_USER, username);
        initialValues.put(KEY_PASS, password);
        initialValues.put(KEY_ACC, account);


        return db.insert(DATABASE_TABLE, null, initialValues);
    }

    // Delete a row from the database, by rowId (primary key)
    public boolean deleteAcc(long accId) {
        String where = KEY_ACCID + "=" + accId;
        return db.delete(DATABASE_TABLE, where, null) != 0;
    }

    public void deleteAll() {
        Cursor c = getAllRows();
        long rowId = c.getColumnIndexOrThrow(KEY_ROWID);
        if (c.moveToFirst()) {
            do {
                deleteAcc(c.getLong((int) rowId));
            } while (c.moveToNext());
        }
        c.close();
    }



    // Return all data in the database.
    public Cursor getAllRows() {
        String where = null;
        Cursor c =  db.query(true, DATABASE_TABLE, ALL_KEYS,
                where, null, null, null, null, null);
        if (c != null) {
            c.moveToFirst();
        }
        return c;
    }

    // Get a specific row (by rowId)
    public Cursor getRow(long rowId) {
        String where = KEY_ROWID + "=" + rowId;
        Cursor c =  db.query(true, DATABASE_TABLE, ALL_KEYS,
                where, null, null, null, null, null);
        if (c != null) {
            c.moveToFirst();
        }
        return c;
    }




    /////////////////////////////////////////////////////////////////////
    //  Private Helper Classes:
    /////////////////////////////////////////////////////////////////////

    /**
     * Private class which handles database creation and upgrading.
     * Used to handle low-level database access.
     */
    private static class DatabaseHelper extends SQLiteOpenHelper
    {
        DatabaseHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
        }

        @Override
        public void onCreate(SQLiteDatabase _db) {
            _db.execSQL(DATABASE_CREATE_SQL);
        }

        @Override
        public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) {
            Log.w(TAG, "Upgrading application's database from version " + oldVersion
                    + " to " + newVersion + ", which will destroy all old data!");

            // Destroy old database:
            _db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);

            // Recreate new database:
            onCreate(_db);
        }
    }
}
4

4 に答える 4

0

あなたのエラーはこの行です:

  EditText User = (EditText)findViewById(R.id.EnterUser), 
Pass = (EditText)findViewById(R.id.EnterPass),
 Acc = (EditText)findViewById(R.id.EnterAcc);

アクティビティの OnCreate() に移動します

于 2016-02-05T18:24:29.150 に答える
0

コードにエラーがあります。

エラー 1:

EditText User = (EditText)findViewById(R.id.EnterUser), Pass = (EditText)findViewById(R.id.EnterPass), Acc = (EditText)findViewById(R.id.EnterAcc);

これを onCreate に移動する必要があります。メソッドの外で findViewById を呼び出すことはできません。

次のように変更する必要があります。

public class MainActivity extends Activity {

    DB myDB;
    Button btnAdd;
    EditText User,Pass, Acc;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);

        User = (EditText)findViewById(R.id.EnterUser);
        Pass = (EditText)findViewById(R.id.EnterPass);
        Acc = (EditText)findViewById(R.id.EnterAcc);
    }
}

setContentView() の後に findViewById が呼び出されることに注意してください

エラー 2 :

null オブジェクトに clickListener を設定しています。

btnAdd は作成されますが、インスタンス化されません。btnAdd が指すビューを見つける必要があります。setOnClickListener の前に findViewByID を使用します。

public class MainActivity extends Activity {
    Button btnAdd;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        btnAdd = (Button)findViewById(R.id.btnAdd);
        btnAdd.setOnClickListener(......
    }
}

エラー3

データベースの作成に使用される文字列が間違っています。列名は引用符で囲む必要があります。

次のように変更します。

から

public class DB {
    private static final String DATABASE_CREATE_SQL =
        "create table " + DATABASE_TABLE
        + " (" + KEY_ACCID + " integer primary key autoincrement, "
        + KEY_USER + " string not null, "
        + KEY_PASS + " string not null, "
        + KEY_ACC + " string not null"
        + ");";
}

public class DB {
    private static final String DATABASE_CREATE_SQL =
        "create table " + DATABASE_TABLE
        + " (\"" + KEY_ACCID + "\" integer primary key autoincrement, \""
        + KEY_USER + "\" string not null, \""
        + KEY_PASS + "\" string not null, \""
        + KEY_ACC + "\" string not null"
        + ")";
}
于 2016-02-05T18:38:14.383 に答える