GC_CONCURRENT problém

hlasů
0

ten chlap pořád kopal do mě z app zmrazit, jakýkoli způsob, jak opravit tento problém?

Zde je můj kód:

import android.app.Activity;
import android.app.Dialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class StartMoving extends Activity implements OnClickListener {

    Button managemove, returnBack, manageroom, settings, kitchen, addmove;
    ImageButton add1;
    EditText newMove;
    TextView roomName, listMove, roomContent, itemValue;
    CheckBox cbox1;
    Dialog d;
    LinearLayout roomButtons, addRooms;
    RelativeLayout main, merge;
    int check = 0;
    int inc = 1;
    String currentMove = null;
    String currentRoom = null;
    String currentItem = null;
    String currentItemValue = null;
    int itemval = 1;
    boolean notavailroom = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.start_moving);

        roomName = (TextView) findViewById(R.id.tvRoomName);

        managemove = (Button) findViewById(R.id.bManageMove);

        manageroom = (Button) findViewById(R.id.bManageRooms);

        merge = (RelativeLayout) findViewById(R.id.rlmanagemove);

        main = (RelativeLayout) findViewById(R.id.rlmain);

        add1 = (ImageButton) findViewById(R.id.bAddDish);

        roomButtons = (LinearLayout) findViewById(R.id.llButtonRooms);

        kitchen = (Button) findViewById(R.id.bKitchen);

        roomContent = (TextView) findViewById(R.id.tvRoomContent);

        itemValue = (TextView) findViewById(R.id.tvItemValue);

        addRooms = (LinearLayout) findViewById(R.id.llhsvLayout);
        addRooms.setOrientation(LinearLayout.HORIZONTAL);

        managemove.setOnClickListener(this);
        manageroom.setOnClickListener(this);
        add1.setOnClickListener(this);
        kitchen.setOnClickListener(this);

        Intent i = getIntent();     
        currentMove = i.getStringExtra(moveName);

    }

    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.bManageMove:
            merge.setVisibility(View.VISIBLE);
            main.setVisibility(View.INVISIBLE);
            check = 1;
            break;

        case R.id.bManageRooms:
            roomButtons.setVisibility(View.VISIBLE);
            main.setVisibility(View.INVISIBLE);
            //          LinearLayout laddbuttons = (LinearLayout) findViewById(R.id.llhsvLayout);
            //          laddbuttons.setOrientation(LinearLayout.HORIZONTAL);
            //
            //          for (int i = 0; i < 3; i++) {
            //              LinearLayout row = new LinearLayout(this);
            //              row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            //
            //              for (int j = 0; j < 4; j++) {
            //                  Button btnTag = new Button(this);
            //                  btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            //                  btnTag.setText(Button  + (j + 1 + (i * 4)));
            //                  btnTag.setId(j + 1 + (i * 4));
            //                  row.addView(btnTag);
            //              }
            //
            //              laddbuttons.addView(row);
            //          }
            check = 2;
            break;

        case R.id.bAddDish:
            currentItem = currentItem + \nDishwahser;
            currentItemValue =  + itemval + \n;
            itemval++;

            roomContent.setText(currentItem);
            itemValue.setText(currentItemValue);
            break;

        case R.id.bKitchen:
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            try {
                SQLHandler kitchen = new SQLHandler(StartMoving.this);
                currentRoom = Kitchen + inc;
                kitchen.open();
                String returnedRoom = kitchen.getRoom(currentRoom);

                while (notavailroom) {
                    if (returnedRoom.equals(currentRoom)) {
                        inc++;
                        returnedRoom = kitchen.getRoom(currentRoom);
                    }else{
                        notavailroom = false;
                        kitchen.addRooms(currentMove, currentRoom);
                        roomName.setText(currentRoom);
                        Button b = new Button(StartMoving.this);
                        b.setText(currentRoom);
                        row.addView(b);
                        b.setOnClickListener(new OnClickListener() {

                            public void onClick(View v) {
                                // TODO Auto-generated method stub

                            }
                        });
                        addRooms.addView(row);
                        main.setVisibility(View.VISIBLE);
                        roomButtons.setVisibility(View.INVISIBLE);
                    }
                }
                kitchen.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                SQLHandler kitchen = new SQLHandler(StartMoving.this);
                currentRoom = Kitchen + inc;
                kitchen.open();
                kitchen.addRooms(currentMove, currentRoom);
                roomName.setText(currentRoom);
                Button b = new Button(StartMoving.this);
                b.setText(currentRoom);
                row.addView(b);
                b.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                    }
                });
                addRooms.addView(row);
                main.setVisibility(View.VISIBLE);
                roomButtons.setVisibility(View.INVISIBLE);
                kitchen.close();
            }

            break;

        default:
            break;
        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);

        roomName.setText(Hello world);
    }

    public void onBackPressed(){
        super.onBackPressed();

    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            // do something on back.
            if (check == 1) {
                merge.setVisibility(View.INVISIBLE);
                main.setVisibility(View.VISIBLE);
                check = 0;
            }else if (check == 2) {
                main.setVisibility(View.VISIBLE);
                roomButtons.setVisibility(View.INVISIBLE);
                check = 0;
            }else {
                //              this.finish();
                Intent i = new Intent(StartMoving.this, ListMovingNames.class);
                startActivity(i);
            }
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }
}

Viníkem tohoto problému je tento řádek kódu

case R.id.bKitchen:
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

            try {
                SQLHandler kitchen = new SQLHandler(StartMoving.this);
                currentRoom = Kitchen + inc;
                kitchen.open();
                String returnedRoom = kitchen.getRoom(currentRoom);

                while (notavailroom) {
                    if (returnedRoom.equals(currentRoom)) {
                        inc++;
                        returnedRoom = kitchen.getRoom(currentRoom);
                    }else{
                        notavailroom = false;
                        kitchen.addRooms(currentMove, currentRoom);
                        roomName.setText(currentRoom);
                        Button b = new Button(StartMoving.this);
                        b.setText(currentRoom);
                        row.addView(b);
                        b.setOnClickListener(new OnClickListener() {

                            public void onClick(View v) {
                                // TODO Auto-generated method stub

                            }
                        });
                        addRooms.addView(row);
                        main.setVisibility(View.VISIBLE);
                        roomButtons.setVisibility(View.INVISIBLE);
                    }
                }
                kitchen.close();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                SQLHandler kitchen = new SQLHandler(StartMoving.this);
                currentRoom = Kitchen + inc;
                kitchen.open();
                kitchen.addRooms(currentMove, currentRoom);
                roomName.setText(currentRoom);
                Button b = new Button(StartMoving.this);
                b.setText(currentRoom);
                row.addView(b);
                b.setOnClickListener(new OnClickListener() {

                    public void onClick(View v) {
                        // TODO Auto-generated method stub

                    }
                });
                addRooms.addView(row);
                main.setVisibility(View.VISIBLE);
                roomButtons.setVisibility(View.INVISIBLE);
                kitchen.close();
            }

            break;

To, co jsem v podstatě chci udělat, je, když kitchen buttonje stisknout nejprve zkontrolovat databázi, pokud je text uveden na tlačítko existovat z databáze, pokud ne, pak výchozí název je uveden na tlačítko a uložit do databáze, ale v případě, že jméno neexistuje jiný název bude dána postupně int incdělat jménocurrentRoom = kitchen + inc;

Zde je také SQLHandler.java pro manipulaci s databází

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

public class SQLHandler {
    public static final String KEY_ROOMMOVEHOLDER = roommoveholder;
    public static final String KEY_ROOM = room;

    public static final String KEY_ITEMMOVEHOLDER = itemmoveholder;
    public static final String KEY_ITEMNAME = itemname;
    public static final String KEY_ITEMVALUE = itemvalue;
    public static final String KEY_ROOMHOLDER = roomholder;

    public static final String KEY_MOVENAME = movename;
    public static final String KEY_ID1 = _id;
    public static final String KEY_ID2 = _id;
    public static final String KEY_ID3 = _id;
    public static final String KEY_ID4 = _id;
    public static final String KEY_MOVEDATE = movedate;

    private static final String DATABASE_NAME = mymovingfriend;
    private static final int DATABASE_VERSION = 1;

    public static final String KEY_TODOMOVE = todomove;
    public static final String KEY_SORTANDPURGE = sortandpurge;
    public static final String KEY_RESEARCH = research;
    public static final String KEY_CREATEMOVINGBINDER = createmovingbinder;
    public static final String KEY_ORDERSUPPLIES = ordersupplies;
    public static final String KEY_USEITORLOSEIT = useitorloseit;
    public static final String KEY_TAKEMEASUREMENTS = takemeasurements;
    public static final String KEY_CHOOSEMOVER = choosemover;
    public static final String KEY_BEGINPACKING = beginpacking;
    public static final String KEY_LABEL = label;
    public static final String KEY_SEPARATEVALUES = separatevalues;
    public static final String KEY_DOACHANGEOFADDRESS = doachangeofaddress;
    public static final String KEY_NOTIFYIMPORTANTPARTIES = notifyimportantparties;

    private static final String DATABASE_TABLE1 = movingname;
    private static final String DATABASE_TABLE2 = movingrooms;
    private static final String DATABASE_TABLE3 = movingitems;
    private static final String DATABASE_TABLE4 = todolist;

    public static final String CREATE_TABLE_1 = CREATE TABLE  + DATABASE_TABLE1 +  ( + 
            KEY_ID1 +  INTEGER PRIMARY KEY AUTOINCREMENT, + 
            KEY_MOVEDATE +  TEXT NOT NULL,  + 
            KEY_MOVENAME +  TEXT NOT NULL);;

    public static final String CREATE_TABLE_2 = CREATE TABLE  + DATABASE_TABLE2 +  ( + 
            KEY_ID2 +  INTEGER PRIMARY KEY AUTOINCREMENT, + 
            KEY_ROOMMOVEHOLDER +  TEXT NOT NULL,  + 
            KEY_ROOM +  TEXT NOT NULL);;

    public static final String CREATE_TABLE_3 = CREATE TABLE  + DATABASE_TABLE3 +  ( + 
            KEY_ID3 +  INTEGER PRIMARY KEY AUTOINCREMENT, + 
            KEY_ITEMNAME +  TEXT NOT NULL,  + 
            KEY_ITEMVALUE +  TEXT NOT NULL,  +
            KEY_ROOMHOLDER +  TEXT NOT NULL,  +   
            KEY_ITEMMOVEHOLDER +  TEXT NOT NULL);;

    public static final String CREATE_TABLE_4 = CREATE TABLE  + DATABASE_TABLE4 +  ( + 
            KEY_ID4 +  INTEGER PRIMARY KEY AUTOINCREMENT, + 
            KEY_TODOMOVE +  TEXT NOT NULL,  +
            KEY_SORTANDPURGE +  TEXT NOT NULL,  + 
            KEY_RESEARCH +  INTEGER NOT NULL,  +
            KEY_CREATEMOVINGBINDER +  TEXT NOT NULL,  + 
            KEY_ORDERSUPPLIES +  TEXT NOT NULL,  +
            KEY_USEITORLOSEIT +  TEXT NOT NULL,  + 
            KEY_TAKEMEASUREMENTS +  TEXT NOT NULL,  +
            KEY_CHOOSEMOVER +  TEXT NOT NULL,  + 
            KEY_BEGINPACKING +  TEXT NOT NULL,  +
            KEY_LABEL +  TEXT NOT NULL,  + 
            KEY_SEPARATEVALUES +  TEXT NOT NULL,  +
            KEY_DOACHANGEOFADDRESS +  TEXT NOT NULL,  + 
            KEY_NOTIFYIMPORTANTPARTIES +  TEXT NOT NULL);;

    private DbHelper ourHelper;
    private final Context ourContext;
    private SQLiteDatabase ourDatabase;

    private static class DbHelper extends SQLiteOpenHelper{

        public DbHelper(Context context) {
            super(context, DATABASE_NAME, null, DATABASE_VERSION);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            // TODO Auto-generated method stub
            db.execSQL(CREATE_TABLE_1);
            db.execSQL(CREATE_TABLE_2);
            db.execSQL(CREATE_TABLE_3);
            db.execSQL(CREATE_TABLE_4);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) {
            // TODO Auto-generated method stub
            db.execSQL(DROP TABLE IF EXISTS  + DATABASE_TABLE1);
            db.execSQL(DROP TABLE IF EXISTS  + DATABASE_TABLE2);
            db.execSQL(DROP TABLE IF EXISTS  + DATABASE_TABLE3);
            db.execSQL(DROP TABLE IF EXISTS  + DATABASE_TABLE4);
            onCreate(db);
        }
    }

    public SQLHandler(Context c){
        ourContext = c;
    }

    public SQLHandler open() throws SQLException{
        ourHelper = new DbHelper(ourContext);
        ourDatabase = ourHelper.getWritableDatabase();
        return this;
    }

    public void close(){
        ourHelper.close();
    }

    public long createMove(String smovename){
        ContentValues cv = new ContentValues();
        cv.put(KEY_MOVENAME, smovename);
        cv.put(KEY_MOVEDATE, Not yet set);
        return ourDatabase.insert(DATABASE_TABLE1, null, cv);
    }

    public long addRooms(String sroommoveholder, String sroom){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ROOMMOVEHOLDER, sroommoveholder);
        cv.put(KEY_ROOM, sroom);
        return ourDatabase.insert(DATABASE_TABLE2, null, cv);
    }

    public long addItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue){
        ContentValues cv = new ContentValues();
        cv.put(KEY_ITEMMOVEHOLDER, sitemmoveholder);
        cv.put(KEY_ROOMHOLDER, sroomholder);
        cv.put(KEY_ITEMNAME, sitemname);
        cv.put(KEY_ITEMVALUE, sitemvalue);
        return ourDatabase.insert(DATABASE_TABLE3, null, cv);
    }

    public long todoList(String todoitem){
        ContentValues cv = new ContentValues();
        cv.put(todoitem, Done);
        return ourDatabase.insert(DATABASE_TABLE4, null, cv);
    }

    public Cursor getMove(){
        String[] columns = new String[]{KEY_ID1, KEY_MOVENAME};
        Cursor cursor = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null);
        return cursor;
    }

    public String getRoom(String r) throws SQLException{
        String[] columns = new String[]{KEY_ID2, KEY_ROOMMOVEHOLDER, KEY_ROOM};
        Cursor c = ourDatabase.query(DATABASE_TABLE2, columns, KEY_ROOM + = ' + r + ' , null, null, null, null);

        if (c != null) {
            c.moveToFirst();
            String roomName = c.getString(2);
            return roomName;
        }
        return null;

    }

}
Položena 24/09/2012 v 02:58
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
1

Vypadá to na mě takhle je konstantní smyčky, protože toto prohlášení:

if (returnedRoom.equals(currentRoom)) {
    inc++;
    returnedRoom = kitchen.getRoom(currentRoom);
}

Nebude returnedRoom vždy rovna currentRoom? (Prostě proto currentRoom nikdy nemění.)

I když jste se postupně inc, to nic nemění currentRoom.

Myslím, že by mělo být

if (returnedRoom.equals(currentRoom)) {
    currentRoom = "Kitchen" + ++inc;
    returnedRoom = kitchen.getRoom(currentRoom);
}
Odpovězeno 24/09/2012 v 03:04
zdroj uživatelem

hlasů
0

Od SQLiteOpenHelper dokumentace:

Tato třída usnadňuje implementace ContentProvider odložit otevření a upgradem databáze až do prvního použití, aby se zabránilo blokování spouštění aplikací s dlouhým chodem upgrade databáze.

Podle dokumentace getReadableDatabase a getWritableDatabase :

Aktualizace databáze může trvat dlouhou dobu, neměli byste tuto metodu volat z hlavního závitu aplikace, včetně z ContentProvider.onCreate ().

Odpovězeno 24/09/2012 v 03:10
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more