Хранение данных с использованием асинхронного возврата с нулевым значением из-за ошибки запуска? - PullRequest
0 голосов
/ 22 апреля 2019

Будет ли эта ошибка запуска причиной возврата null каждый раз, когда я сохраняю данные в базу данных sql с помощью ayncs?:

E/KernelCpuSpeedReader: Failed to read cpu-freq
    java.io.FileNotFoundException: /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state: open failed: ENOENT (No such file or directory)
        at libcore.io.IoBridge.open(IoBridge.java:452)
        at java.io.FileInputStream.<init>(FileInputStream.java:76)
        at java.io.FileInputStream.<init>(FileInputStream.java:103)
        at java.io.FileReader.<init>(FileReader.java:66)

Я пытаюсь использовать Async и базу данных sqlite для хранения четырех входных данных:

  • Код товара
  • Наименование товара
  • Количество
  • Цена

Основной

У меня есть специальный адаптер, который должен помочь сохранить, а затем отобразить входные данные в списке массивов. Тем не менее, каждая попытка сохранить входные данные приводит к записи «нулевого», когда я нажимаю «Сохранить». Есть ли что-то необычное в том, как этот адаптер был построен?

BackgroundTask.JAVA

public class BackgroundTask extends AsyncTask<String, Product, String> {
    Context ctx;
    ProductAdapter productAdapter;
    Activity activity;
    ListView listView;

    BackgroundTask(Context ctx){
        this.ctx=ctx;
        activity=(Activity)ctx;
    }

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

    @Override
    protected String doInBackground(String... params) {
        String method = params[0];
        DbOperations dbOperations = new DbOperations(ctx);

        if(method.equals("add_info")){ // when save button it clicked, it runs backgroundTask.execute("add _info", id, name, price, quantity);
            String Id= params[1];
            String Name = params[2];
            int Price = Integer.parseInt(params[3]);
            int qty = Integer.parseInt(params[4]);
            SQLiteDatabase sqLiteDatabase =dbOperations.getWritableDatabase();
            dbOperations.addInformations(sqLiteDatabase, Id, Name,Price, qty);
            return "one row inserted";
        }

        else if(method.equals("get_info")){
            listView=activity.findViewById(R.id.display_listview);
            SQLiteDatabase sqLiteDatabase = dbOperations.getReadableDatabase();
            Cursor cursor = dbOperations.getInformations(sqLiteDatabase);
            productAdapter=new ProductAdapter(ctx, R.layout.display_product_row);
            String id, name;
            int price, qty;
            while(cursor.moveToNext()){
                id = cursor.getString(cursor.getColumnIndex(ProductContract.ProductEntry.ID));
                name= cursor.getString(cursor.getColumnIndex(ProductContract.ProductEntry.NAME));
                price = cursor.getInt(cursor.getColumnIndex(ProductContract.ProductEntry.PRICE));
                qty = cursor.getInt(cursor.getColumnIndex(ProductContract.ProductEntry.QTY));
                Product product = new Product(id, name, price, qty);
                publishProgress(product);
            }
            return "get_info";
        }
        return "null";  <------ Here it's always being returned instead of saving above data
    }

    @Override
    protected void onProgressUpdate(Product... values) {
        productAdapter.add(values[0]);
    }

    @Override
    protected void onPostExecute(String result) {
        if(result.equals("get_info")){
                listView.setAdapter(productAdapter);
        }
        else {
            Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
        }
    }
}

DisplayProduct.Java

public class DisplayProduct extends AppCompatActivity {

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

        BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute("get_info");
    }
}

MainActivity.JAVA

public class MainActivity extends AppCompatActivity {

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

    public void addProduct(View view) {

        startActivity(new Intent(this, save_info.class));
    }

    public void displayProducts(View view) {
        startActivity(new Intent(this, DisplayProduct.class));
    }
}

ProductAdapter.JAVA

public class ProductAdapter extends ArrayAdapter {
    List list = new ArrayList();

    public ProductAdapter(Context context, int resource) {
        super(context, resource);
    }

    public void add(Product object) {
        list.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return list.size();
    }

        @Override
    public Object getItem(int position) {
        return list.get(position);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ProductHolder productHolder;
        if(row == null){
        LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = (View)layoutInflater.inflate(R.layout.display_product_row, parent, false);
        productHolder = new ProductHolder();
            productHolder.tx_id=row.findViewById(R.id.t_id);
            productHolder.tx_name=row.findViewById(R.id.t_name);
            productHolder.tx_price=row.findViewById(R.id.t_price);
            productHolder.tx_quantity=row.findViewById(R.id.t_qty);
            row.setTag(productHolder);
    }else
        {
            productHolder = (ProductHolder)row.getTag();
        }
        Product product = (Product)getItem(position);
        productHolder.tx_name.setText(product.getId().toString());
        productHolder.tx_id.setText(product.getId().toString());
        productHolder.tx_price.setText(Integer.toString(product.getPrice()));
        productHolder.tx_quantity.setText(Integer.toString(product.getQty()));

    return row;
    }

    static class ProductHolder{
        TextView tx_id, tx_name, tx_price, tx_quantity;
    }
}

save_info.JAVA

public class save_info extends AppCompatActivity {
    EditText e_id, e_name, e_price, e_quantity;
    String id, name, price, quantity;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.save_info_layout);
        e_id=(EditText)findViewById(R.id.d_id);
        e_name=(EditText)findViewById(R.id.d_name);
        e_price=(EditText)findViewById(R.id.d_price);
        e_quantity=(EditText)findViewById(R.id.d_qty);

    }

    public void saveData(View view) {
        id=e_id.getText().toString();
        name=e_name.getText().toString();
        price=e_price.getText().toString();
        quantity=e_quantity.getText().toString();
        BackgroundTask backgroundTask = new BackgroundTask(this);
        backgroundTask.execute("add _info", id, name, price, quantity);
        finish();

    }
}

dBOperations.JAVA

public class DbOperations extends SQLiteOpenHelper {
    private static final int DB_VERSION=1;
    private static final String DB_NAME="product_info.db";
    private static final String CREATE_QUERY = "create table "+ProductContract.ProductEntry.TABLE_NAME+
            "("+ ProductContract.ProductEntry.ID+ " text,"+ ProductContract.ProductEntry.NAME+" text,"+
            ProductContract.ProductEntry.PRICE+ " integer,"+ ProductContract.ProductEntry.QTY+ " integer);";

    static final String DATABASE_CREATE="create table product_table " +
            "(_id integer primary key autoincrement, " + "id text not null, name text not null, price integer not null, quantity  integer not null);";

    DbOperations(Context ctx){
        super(ctx, DB_NAME, null, DB_VERSION);
        Log.d("DATABASE OPERATIONS", "DATABASE CREATED...");
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
        sqLiteDatabase.execSQL(CREATE_QUERY);
        Log.d("Database operations", "TABLE CREATED...");

    }

    public void addInformations(SQLiteDatabase sqLiteDatabase, String id, String name, int price, int qty){
        ContentValues contentValues = new ContentValues();
        contentValues.put(ProductContract.ProductEntry.ID, id);
        contentValues.put(ProductContract.ProductEntry.NAME, name);
        contentValues.put(ProductContract.ProductEntry.PRICE, price);
        contentValues.put(ProductContract.ProductEntry.QTY, qty);
        sqLiteDatabase.insert(ProductContract.ProductEntry.TABLE_NAME, null, contentValues);
        Log.d("DATABASE OPERATIONS", "ONE ROW INSERTED");

    }

    public Cursor getInformations(SQLiteDatabase sqLiteDatabase){
        String[] projections = {ProductContract.ProductEntry.ID, ProductContract.ProductEntry.NAME,
                ProductContract.ProductEntry.PRICE, ProductContract.ProductEntry.QTY};

        Cursor cursor = sqLiteDatabase.query(ProductContract.ProductEntry.TABLE_NAME, projections,
                null, null, null, null,null );
        return cursor;
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    }
}
...