变量的值不递增

问题描述 投票:0回答:0

我正在开发一个 Android 项目,管理员可以在该项目中向存储在数据库中的应用程序添加产品。其中产品编号 (p_no) 必须递增并显示在布局上。但是操作没有按预期执行,这里有一些我无法弄清楚的错误。

AddProduct.java:

package com.tyit.desertworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.app.AlertDialog;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.Spinner;
import java.io.File;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class AddProduct extends AppCompatActivity implements View.OnClickListener {
    Connection con;
    int n = 1;
    static EditText txt_pno, txt_name, txt_price,txt_desc,txt_filename;
    String pno,name,price,desc,type;
    Button b1,b2;
    Spinner s;
    Uri selectedImage;
    InputStream iStream=null;
    File source=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add_product);
        txt_pno = (EditText) findViewById(R.id.txt_pno);
        txt_name = (EditText) findViewById(R.id.editText7);
        txt_price = (EditText) findViewById(R.id.editText8);
        txt_desc= (EditText) findViewById(R.id.editText9);
        txt_filename= (EditText) findViewById(R.id.editText10);
        s=(Spinner)findViewById(R.id.spinner);
        String c[] = {"Cake", "Pastry"};
        ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_spinner_item, c);
        adapter1.setDropDownViewResource(android.R.layout.simple_spinner_item);
        s.setAdapter(adapter1);
        b1 = (Button) findViewById(R.id.button2);
        b1.setOnClickListener(this);
        b2 = (Button) findViewById(R.id.button17);
        b2.setOnClickListener(this);
        DB_Conn1 obj=new DB_Conn1();
        obj.execute();

    }
    public void onClick(View v) {
        if(v.getId()==b1.getId()) {
            name = txt_name.getText().toString();
            price = txt_price.getText().toString();
            desc = txt_desc.getText().toString();
            pno=txt_pno.getText().toString().substring(12);
            type=s.getSelectedItem().toString();
            if (!name.isEmpty()) {
                if (!price.isEmpty() && Integer.parseInt(price)>0) {
                    if (!desc.isEmpty()) {
                        DB_Conn obj = new DB_Conn();
                        obj.execute();
                    }
                    else {
                        txt_desc.setError("Value is required");
                    }
                }
                else {
                    txt_price.setError("Value not entered or invalid value entered");
                }
            }
            else {
                txt_name.setError("Value is required");
            }
        }
        else{
            Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI);
            startActivityForResult(i, 1);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data != null) {
            Uri sel = data.getData();
            try {
                iStream = getContentResolver().openInputStream(sel);
                String src = sel.getPath();
                source = new File(Environment.getExternalStorageDirectory()+"/"+src);
                txt_filename.setText(source.getName());
            }
            catch (Exception e){
                e.printStackTrace();
            }
        }
    }
    class DB_Conn1 extends AsyncTask<Void,Void,String>
    {
        @Override
        public String doInBackground(Void...arg) //compulsory to implement
        {
            String r="";
            try {
                SharedPreferences sp1 = getSharedPreferences("pf", Context.MODE_PRIVATE);
                String userid=sp1.getString("userid", null);
                con = DB_Connection.get_DBConnection();
                PreparedStatement pst = con.prepareStatement("select max(pno) from products");
                ResultSet rs = pst.executeQuery();
                rs.next();
                String v = rs.getString(1);
                if (v != null) {
                    n = Integer.parseInt(v) + 1;
                }
                r = "success";
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return r;
        }
        @Override
        public void onProgressUpdate(Void...arg0) //optional
        {
        }
        @Override
        public void onPostExecute(String result) //optional
        { // do something after execution
            if(result.equals("success"))
            {
                txt_pno.setText("Product No: " + n);
            }
        }
        @Override
        public void onPreExecute() //optional
        {
// do something before start
        }
    }
    class DB_Conn extends AsyncTask<Void,Void,String>
    {
        @Override
        public String doInBackground(Void...arg) //compulsory to implement
        {
            String r="";
            try {
                Connection con = DB_Connection.get_DBConnection();
                PreparedStatement pst = con.prepareStatement("insert into products values(?,?,?,?,?,?)");
                pst.setString(1, pno);
                pst.setString(2, name);
                pst.setString(3,desc);
                pst.setString(4,type);
                pst.setInt(5, Integer.parseInt(price));
                pst.setBlob(6,iStream);
                pst.execute();
                r = "success";
                con.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return r;
        }
        @Override
        public void onProgressUpdate(Void...arg0) //optional
        {
        }
        @Override
        public void onPostExecute(String result) //optional
        {
// do something after execution
            if(result.equals("success"))
            {
                AlertDialog.Builder alert = new AlertDialog.Builder(AddProduct.this);
                alert.setTitle("Success");
                alert.setMessage("Product added successfully");
                alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface obj, int x) {
                        AddProduct.this.finish();
                    }
                });
                AlertDialog alertDialog = alert.create();
                alertDialog.show();
            }
        }
        @Override
        public void onPreExecute() //optional
        {
// do something before start
        }
    }
}

activity_add_product.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="50px"
    tools:context=".AddProduct">

    <EditText
        android:id="@+id/txt_pno"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:enabled="false"
        android:textStyle="bold" />

    <EditText
        android:id="@+id/editText7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txt_pno"
        android:layout_alignEnd="@+id/txt_pno"
        android:layout_alignRight="@+id/txt_pno"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:hint="Enter Product name" />

    <EditText
        android:id="@+id/editText8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText7"
        android:layout_alignEnd="@+id/editText7"
        android:layout_alignRight="@+id/editText7"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:ems="10"
        android:hint="Enter Price"
        android:inputType="numberSigned" />

    <EditText
        android:id="@+id/editText9"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText8"
        android:layout_alignEnd="@+id/editText8"
        android:layout_alignRight="@+id/editText8"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:gravity="top|left"
        android:hint="Enter description"
        android:inputType="textMultiLine"
        android:lines="4" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="44dp"
        android:text="Add" />

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText9"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true" />

    <Button
        android:id="@+id/button17"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/spinner"
        android:layout_alignRight="@+id/spinner"
        android:layout_alignBottom="@+id/editText10"
        android:text="Select" />

    <EditText
        android:id="@+id/editText10"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/spinner"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_toStartOf="@+id/button17"
        android:layout_toLeftOf="@+id/button17"
        android:focusable="false" />
</RelativeLayout>

这是将存储值的产品表的数据库结构

p_no的数据类型在数据库中是varchar,'n'的值是一个整数。此外,

pno=txt_pno.getText().toString().substring(12);
正在选择产品编号后的整数值:在
txt_pno.setText("Product No: " + n);

我不明白为什么 'n' 的值没有递增并显示在屏幕上并抛出 StringIndexOutOfBoundsException length=0 index=12

database android-studio indexoutofboundsexception
© www.soinside.com 2019 - 2024. All rights reserved.