Передача данных (включая изображение) из ListView в другое действие (независимо от параметров каждого ListView) и инициализация начальных значений для каждого - PullRequest
0 голосов
/ 01 апреля 2019

У меня проблема с передачей данных из ListView в операцию BuyerHome. Данные в ListView включают имя элемента, описание, начальную цену, продолжительность и изображение. Название и описание товара выполнены без ошибок. Однако Начальную цену, длительность и изображение я не смог правильно понять, так как он конфликтует с другими имеющимися у меня кодами, которые обновят их значения (для продолжительности и начальной цены). Что касается изображений, я не слишком уверен, какой формат для меня, чтобы передать изображение.

А также, всякий раз, когда вы нажимаете на каждый параметр ListView, они должны быть независимы друг от друга. Как и сейчас, мое приложение дублирует значения для всех моих действий при нажатии.

AuctionList.java:

public class AuctionList extends AppCompatActivity {
ListView mListView;

ArrayList<Model> mList = new ArrayList<>();;
AuctionListAdapter mAdapter = null;
DatabaseHelperUpload mDBUpload;


TextView txtName,txtDescription,txtDuration,txtPrice;
ImageView imageViewIcon;

@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.auction_list);
    View inflatedView = getLayoutInflater().inflate(R.layout.row, null);



    mDBUpload = new DatabaseHelperUpload(this);
    mListView = findViewById(R.id.listView);

    mAdapter = new AuctionListAdapter(this,R.layout.row,mList);
    mListView.setAdapter(mAdapter);
    txtName = inflatedView.findViewById(R.id.txtName);
    txtDescription = inflatedView.findViewById(R.id.txtDescription);
    txtDuration = inflatedView.findViewById(R.id.txtDuration);
    txtPrice = inflatedView.findViewById(R.id.txtPrice);



    final Cursor cursor = mDBUpload.getData("SELECT * FROM RECORD");
    mList.clear();
    while(cursor.moveToNext()){
        int id = cursor.getInt(0);
        String name = cursor.getString(1);
        String description = cursor.getString(2);
        String price = cursor.getString(3);
        String duration = cursor.getString(4);
        byte[] image = cursor.getBlob(5);

        mList.add(new Model(id,name,description,price,duration,image));
    }
    mAdapter.notifyDataSetChanged();
    if(mList.size() == 0){
        Toast.makeText(this, "No Auctions Currently", Toast.LENGTH_SHORT).show();
    }

    mListView.setAdapter(mAdapter);
    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Model e = mList.get(position);

            String name = e.getName();
            String description = e.getDescription();
            String price = e.getPrice();
            String duration = e.getDuration();
            //byte[] image = e.getImage();
            Intent intent5 = new Intent(AuctionList.this,BuyerHome.class);
            intent5.putExtra("name",name);
            intent5.putExtra("description",description);
            intent5.putExtra("price",price);
            intent5.putExtra("duration",duration);
            //intent5.putExtra("image",image);

            startActivity(intent5);
        }
    });


}

BuyerHome.java:

public class BuyerHome extends AppCompatActivity implements AdapterView.OnItemSelectedListener, NavigationView.OnNavigationItemSelectedListener {
EditText nameIn;
EditText commentIn;
TextView viewComment;
TextView textPrice;
Button postComment;
ListView olderComments;
private DrawerLayout drawer; //Drawer
private int currentPrice;
private static long START_TIME_IN_MILLIS ;



DatabaseHelper2 myDB;
Cursor oldermessages, latestmessage;
Cursor latestprice;
SimpleCursorAdapter sma;

DatabaseHelper4 myDB2;





private TextView mTextViewCountDown;
private Button mButtonStart;




private CountDownTimer mCountDownTimer;

private boolean mTimerRunning;

private long mTimeLeftInMillis;
private long mEndTime;

private TextView TextViewPrice;
private Button newPrice;

DatabaseHelperUpload mDBUpload;




@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_buyer_home);

    Spinner spinner = findViewById(R.id.spinner);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,R.array.Addon,android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(this);







    newPrice = (Button)findViewById(R.id.button_bid);

    mDBUpload = new DatabaseHelperUpload(this);


    nameIn = (EditText) findViewById(R.id.nameInput);
    commentIn = (EditText) findViewById(R.id.commentText);
    viewComment = (TextView) findViewById(R.id.viewCommentText);
    olderComments = (ListView) findViewById(R.id.olderComments); //<<<<<<<<<< Added
    textPrice = (TextView)findViewById(R.id.textPrice);
    TextViewPrice = (TextView)findViewById(R.id.textview_newprice);


    Toolbar toolbar = findViewById(R.id.toolbar); //Drawer
    setSupportActionBar(toolbar);


    drawer = findViewById(R.id.drawer_layout); //Drawer

    mTextViewCountDown = (TextView)findViewById(R.id.text_view_countdown);
    mButtonStart = (Button)findViewById(R.id.buttonStart);


    Bundle bundle = getIntent().getExtras();



    String name = bundle.getString("name");
    String duration = bundle.getString("duration");
    String price = bundle.getString("price");





    TextView durationLog = (TextView)findViewById(R.id.text_view_countdown);
    TextView priceLog = (TextView)findViewById(R.id.textPrice);
    TextView nameLog = (TextView)findViewById(R.id.txtItemName);
    //TextView pricelog2 = findViewById(R.id.tvPrice);


    durationLog.setText(duration);
    priceLog.setText(price);
    nameLog.setText(name);
    //pricelog2.setText(price);




    myDB2 = new DatabaseHelper4(this);
    newPrice.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String price = textPrice.getText().toString();

            if (nameIn.length() != 0) {
                    String name = nameIn.getText().toString();

                    myDB2.addPrice(name, price);
                    nameIn.setEnabled(false);

                    displayPrice();
                    displayPrice2();

            }else{
                Toast.makeText(BuyerHome.this, "Please Insert Username To Bid.",
                        Toast.LENGTH_SHORT).show();
            }
        }
    });

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawer,toolbar,
            R.string.navigation_drawer_open,R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState(); //Drawer
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

    myDB = new DatabaseHelper2(this);
    postComment = (Button) findViewById(R.id.buttonComment);
    postComment.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String name = nameIn.getText().toString();
            String comment = commentIn.getText().toString();

            if (nameIn.length() != 0 && commentIn.length() != 0) {
                myDB.addData(name, comment); //<<<<<<<<<< method starts changed lower case a
                nameIn.setEnabled(false);
                commentIn.setText("");
            } else {
                Toast.makeText(BuyerHome.this, "Insert fields",
                        Toast.LENGTH_SHORT).show();
            }
            displayComments(); //<<<<<<<<<< added to refresh the display according to the latest comments
        }
    });



    mButtonStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startTimer();
        }
    });


}

private static byte[] imageViewToByte(ImageView image) {
    Bitmap bitmap = ((BitmapDrawable)image.getDrawable()).getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100,stream);
    byte[] byteArray = stream.toByteArray();
    return byteArray;
}

@Override //Drawer
public void onBackPressed() {
    if(drawer.isDrawerOpen(GravityCompat.START)){
        drawer.closeDrawer(GravityCompat.START);
    } else{
        super.onBackPressed();
    }

}

//<<<<<<<<<< ADDED so will display comments whenever called including returning from another activity
@Override
protected void onResume() {
    super.onResume();
    displayComments();
    displayPrice();
    displayPrice2();

}

private void displayPrice2() {

    latestprice = myDB2.getLatestPrice();
    if (latestprice.moveToFirst()) {

        String a = String.valueOf(latestprice.getString(latestprice.getColumnIndex(DatabaseHelper4.COL_BID_PRICE)));
        currentPrice = Integer.parseInt(a);

    } else {
        TextViewPrice.setText("");
    }
}

private void displayPrice() {
    latestprice = myDB2.getLatestPrice();
    if (latestprice.moveToFirst()) {
        TextViewPrice.setText( latestprice.getString(latestprice.getColumnIndex(DatabaseHelper4.COL_BID_NAME))+
                " Bids $" + latestprice.getString(latestprice.getColumnIndex(DatabaseHelper4.COL_BID_PRICE)));
    } else {
        TextViewPrice.setText("");
    }
}

//<<<<<<<<<< ADDED entire method for displaying comments
private void displayComments() {
    latestmessage = myDB.getLatestComment();

    if (latestmessage.moveToFirst()) {
        viewComment.setText(
                latestmessage.getString(latestmessage.getColumnIndex(DatabaseHelper2.COL_COMMENT_NAME)) +
                        " said : " +
                        latestmessage.getString(latestmessage.getColumnIndex(DatabaseHelper2.COL_COMMENT_COMMENT)));
    } else {
        viewComment.setText("");
    }
    oldermessages = myDB.getAllButLatestComment();
    if (sma == null) {
        sma = new SimpleCursorAdapter(
                this,
                android.R.layout.simple_list_item_2,oldermessages,
                new String[]{DatabaseHelper2.COL_COMMENT_NAME,DatabaseHelper2.COL_COMMENT_COMMENT},
                new int[]{android.R.id.text1,android.R.id.text2},
                0
        );
        olderComments.setAdapter(sma);
    } else {
        sma.swapCursor(oldermessages);
    }
}

public void startTimer(){
    mEndTime = System.currentTimeMillis() + mTimeLeftInMillis;

    mCountDownTimer = new CountDownTimer(mTimeLeftInMillis,1000) {
        @Override
        public void onTick(long millisUntilFinished) {
            mTimeLeftInMillis = millisUntilFinished;
            updateTimer();
        }

        @Override
        public void onFinish() {
            Spinner spinner = findViewById(R.id.spinner);
            spinner.setEnabled(false);//upon finish,stop the function to bid and wait for seller to delete post.
        }
    }.start();
    mTimerRunning = true;
}

private void resetTimer() {
    //START_TIME_IN_MILLIS = 600000;
    mTimeLeftInMillis = START_TIME_IN_MILLIS;
    updateTimer();
    mButtonStart.setVisibility(View.VISIBLE);
}

public void updateTimer(){
    int minutes = (int) (mTimeLeftInMillis/1000)/60;
    int seconds = (int) (mTimeLeftInMillis/1000) %60;

    String timeLeftFormat = String.format(Locale.getDefault(),"%02d:%02d", minutes,seconds);

    mTextViewCountDown.setText(timeLeftFormat);

}

@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

    String text = String.valueOf(parent.getItemAtPosition(position));

    int numberInSpinner = Integer.parseInt(text);

    int sum = numberInSpinner + currentPrice;
    textPrice.setText(Integer.toString(sum));
}

@Override
public void onNothingSelected(AdapterView<?> parent) {

}

@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
    switch(menuItem.getItemId()){
        case R.id.nav_inst:
            startActivity(new Intent(getApplicationContext(), Instructions.class));
            break;
        case R.id.nav_auctionlist:
            startActivity(new Intent(getApplicationContext(), AuctionList.class));
            break;
        case R.id.nav_sell:
            startActivity(new Intent(getApplicationContext(), SellerHome.class));
            break;
        case R.id.nav_logout:
            startActivity(new Intent(getApplicationContext(), AucOn.class));
            break;
        case R.id.nav_email:
            startActivity(new Intent(getApplicationContext(), CustomerSupport.class));
            break;

    }
    drawer.closeDrawer(GravityCompat.START);
    return true;
}

@Override
protected void onStop(){
    super.onStop();

    SharedPreferences prefs = getSharedPreferences("prefs",MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();

    editor.putLong("millisLeft",mTimeLeftInMillis);
    editor.putBoolean("timerRunning",mTimerRunning);
    editor.putLong("endTime",mEndTime);

    editor.apply();

    if (mCountDownTimer != null) {
        mCountDownTimer.cancel();
    }
}

@Override
protected void onStart(){
    super.onStart();

    SharedPreferences prefs = getSharedPreferences("prefs",MODE_PRIVATE);
    mTimeLeftInMillis = prefs.getLong("millisLeft", START_TIME_IN_MILLIS);
    mTimerRunning = prefs.getBoolean("timerRunning",false);

    updateTimer();

    if(mTimerRunning){
        mEndTime = prefs.getLong("endTime", 0);
        mTimeLeftInMillis = mEndTime - System.currentTimeMillis();


        if (mTimeLeftInMillis<0){
            mTimeLeftInMillis = 0;
            mTimerRunning = false;
            updateTimer();

        } else{
            startTimer();

        }
    }
}
}

Я полагаю, что это может быть связано и с базой данных SQLite, так что вот вам:

public class DatabaseHelperUpload extends SQLiteOpenHelper {



private final static String DBNAME = "Auction";
private final static int DBVERSION = 2;

DatabaseHelperUpload(Context context){
    super(context, DBNAME, null, DBVERSION);
}

public void queryData(String sql){
    SQLiteDatabase database = getWritableDatabase();
    database.execSQL(sql);
}

public void insertData(String name, String description, String price, String duration, byte[] image){
    SQLiteDatabase database = getWritableDatabase();
    String sql = "INSERT INTO RECORD VALUES(NULL,?,?,?,?,?)";

    SQLiteStatement statement = database.compileStatement(sql);
    statement.clearBindings();

    statement.bindString(1,name);
    statement.bindString(2,description);
    statement.bindString(3,price);
    statement.bindString(4,duration);
    statement.bindBlob(5,image);

    statement.executeInsert();

}


public Cursor getData(String sql){
    SQLiteDatabase database=getReadableDatabase();

    return database.rawQuery(sql,null);
}

@Override
public void onCreate(SQLiteDatabase db) {

}

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

}
}

1 Ответ

0 голосов
/ 02 апреля 2019

Если вы пытаетесь получить данные из пакета в операции BuyerHome , то вам следует поместить данные в пакет из операции AuctionList .

поместить все данные, которые выхотите передать BuyerHome активность в пакет и затем передать ее.

AuctionList.class:

mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            Model e = mList.get(position);

            String name = e.getName();
            String description = e.getDescription();
            String price = e.getPrice();
            String duration = e.getDuration();
            //byte[] image = e.getImage();
            Intent intent5 = new Intent(AuctionList.this, BuyerHome.class);
            Bundle bundle = new Bundle();
            bundle.putString("name", name);
            bundle.putString("description", description);
            bundle.putString("price", price);
            bundle.putString("duration", duration);
            //intent5.putExtra("image",image);
            intent5.putExtras(bundle);

            startActivity(intent5);
        }
    });

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...