在这段代码中我有关于项目主线程重载的错误

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

在简单的 xampp mysql 数据库中,将应用程序与 java 文件(如 main、数据库助手、登录、注册、产品、产品适配器、搜索菜单、启动和 android studio 中的 Utils)连接,出现错误,即 com.android.volley.TimeoutError

我在真实设备和虚拟设备上都试过了。

这是我的 php 连接到 db

    <?php

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "db";

    // Create connection
    // create a connection to the database
    $conn = mysqli_connect($servername, $username, $password, $dbname);

    // check the connection
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }

    // query to retrieve product data
    $sql = "SELECT id, product, pkg, unit, company, salt, sr, mrp FROM fa1;";


    // execute the query and get the result set
    $result = mysqli_query($conn, $sql);
    if (!$result) {
        die("Query failed: " . mysqli_error($conn));
    }

    // create an empty array to hold the products
    $products = array();

    if (mysqli_num_rows($result) > 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $product = array(
                'id' => $row['id'],
                'product' => $row['product'],
                'pkg' => $row['pkg'],
                'unit' => $row['unit'],
                'company' => $row['company'],
                'salt' => $row['salt'],
                'sr' => $row['sr'],
                'mrp' => $row['mrp']
            );
            array_push($products, $product);
        }
    }

    // close the database connection
    mysqli_close($conn);

    // set the response header to JSON
    header('Content-Type: application/json');

    // encode the products array in JSON format and return it
    echo json_encode($products);

    ?>

这是我的数据库帮助文件,其中包含截击过程

package com.aumdistributor.loginapp;

import static androidx.constraintlayout.helper.widget.MotionEffect.TAG;

import android.annotation.SuppressLint;
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;
import android.widget.Toast;

import com.android.volley.DefaultRetryPolicy;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.RetryPolicy;
import com.android.volley.TimeoutError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "products.db";
    private static final int DATABASE_VERSION = 1;
    private static final String TABLE_PRODUCTS = "products";
    private static final String COLUMN_ID = "id";
    private static final String COLUMN_PRODUCT = "product";
    private static final String COLUMN_PKG = "pkg";
    private static final String COLUMN_UNIT = "unit";
    private static final String COLUMN_COMPANY = "company";
    private static final String COLUMN_SALT = "salt";
    private static final String COLUMN_SR = "sr";
    private static final String COLUMN_MRP = "mrp";
    private static final String CREATE_PRODUCTS_TABLE = "CREATE TABLE " + TABLE_PRODUCTS + "("
            + COLUMN_ID + " INTEGER PRIMARY KEY,"
            + COLUMN_PRODUCT + " TEXT,"
            + COLUMN_PKG + " TEXT,"
            + COLUMN_UNIT + " TEXT,"
            + COLUMN_COMPANY + " TEXT,"
            + COLUMN_SALT + " TEXT,"
            + COLUMN_SR + " DOUBLE,"
            + COLUMN_MRP + " DOUBLE"
            + ")";
    // creating user table format
    public static final String TABLE_USER = "user";
    public  static final String KEY_FULLNAME = "fullname";
    public static final String KEY_USERNAME = "username";
    public static final String KEY_PASSWORD = "password";
    public static final String KEY_EMAIL = "email";

    private static final String CREATE_USER_TABLE = "CREATE TABLE " + TABLE_USER + " (" +
            COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
            KEY_FULLNAME + " TEXT, " +
            KEY_USERNAME + " TEXT, " +
            KEY_EMAIL + " TEXT, " +
            KEY_PASSWORD + " TEXT)";

    //creating database for user and table for both userdata and productdata
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_PRODUCTS_TABLE);
        db.execSQL(CREATE_USER_TABLE);
    }

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

    }
    public void getAllProducts(Context context, List<Product> productList, ProductAdapter productAdapter) {
        String url = "http://192.168.**.**/get_product.php";

        RequestQueue queue = Volley.newRequestQueue(context);

        // Set a longer timeout for the request
        int socketTimeout = 150000; // 30 seconds
        RetryPolicy policy = new DefaultRetryPolicy(socketTimeout, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);

        @SuppressLint("NotifyDataSetChanged") JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(
                Request.Method.GET,
                url,
                null,
                response -> {
                    // Parse the JSON array to a list of products
                    List<Product> products = new ArrayList<>();
                    for (int i = 0; i < response.length(); i++) {
                        try {
                            JSONObject productObj = response.getJSONObject(i);
                            Product product = new Product(
                                    productObj.getInt(("id")), productObj.getString("product"),
                                    productObj.getString("pkg"), productObj.getString("unit"),
                                    productObj.getString("company"), productObj.getString("salt"),
                                    productObj.getDouble("sr"), productObj.getDouble("mrp"));
                            products.add(product);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    // Add the products to the adapter
                    productList.addAll(products);
                    productAdapter.notifyDataSetChanged();
                },
                error -> {
                    if (error instanceof TimeoutError) {
                        Toast.makeText(context, "Request timed out", Toast.LENGTH_SHORT).show();
                    } else {
                        Toast.makeText(context, "Error fetching products: " + error.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                    Log.e("Volley Error", error.toString());
                }
        );

        // Set the retry policy for the request
        jsonArrayRequest.setRetryPolicy(policy);

        queue.add(jsonArrayRequest);
    }


    public long addUser(String fullname, String username, String email, String password) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(KEY_FULLNAME, fullname);
        contentValues.put(KEY_USERNAME, username);
        contentValues.put(KEY_EMAIL, email);
        contentValues.put(KEY_PASSWORD, password);

        Log.d(TAG, "Attempting to insert user with the following details:");
        Log.d(TAG, "Fullname: " + fullname);
        Log.d(TAG, "Username: " + username);
        Log.d(TAG, "Email: " + email);
        Log.d(TAG, "Password: " + password);

        long result = db.insert(TABLE_USER, null, contentValues);
        db.close();
        return result;
    }


    public boolean checkUser(String username) {
        SQLiteDatabase db = getReadableDatabase();
        String[] columns = {KEY_USERNAME};
        String selection = KEY_USERNAME + " = ?";
        String[] selectionArgs = {username};
        Cursor cursor = db.query(TABLE_USER, columns, selection, selectionArgs, null, null, null);
        int count = cursor.getCount();
        cursor.close();
        return count > 0;
    }

    public void addProduct(Product product) {
        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(COLUMN_ID, product.getId());
        values.put(COLUMN_PRODUCT, product.getProduct());
        values.put(COLUMN_PKG, product.getPkg());
        values.put(COLUMN_UNIT, product.getUnit());
        values.put(COLUMN_COMPANY, product.getCompany());
        values.put(COLUMN_SALT, product.getSalt());
        values.put(COLUMN_SR, product.getSr());
        values.put(COLUMN_MRP, product.getMrp());

        db.insert(TABLE_PRODUCTS, null, values);
        db.close();
    }

    public List<Product> getAllProductsFromDb() {
        List<Product> productList = new ArrayList<>();
        SQLiteDatabase db = this.getWritableDatabase();
        String query = "SELECT * FROM " + TABLE_PRODUCTS;
        Cursor cursor = db.rawQuery(query, null);

        while (cursor.moveToNext()) {
            int id = cursor.getInt(cursor.getColumnIndexOrThrow(COLUMN_ID));
            String product = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PRODUCT));
            String pkg = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_PKG));
            String unit = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_UNIT));
            String company = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_COMPANY));
            String salt = cursor.getString(cursor.getColumnIndexOrThrow(COLUMN_SALT));
            double sr = cursor.getDouble(cursor.getColumnIndexOrThrow(COLUMN_SR));
            double mrp = cursor.getDouble(cursor.getColumnIndexOrThrow(COLUMN_MRP));
            productList.add(new Product(id, product, pkg, unit, company, salt, sr, mrp));
        }

        cursor.close();
        db.close();
        return productList;
    }

    public boolean deleteProduct(int productId) {
        SQLiteDatabase db = this.getWritableDatabase();
        int rowsAffected = db.delete(TABLE_PRODUCTS, COLUMN_ID + "=?", new String[]{String.valueOf(productId)});
        db.close();
        return rowsAffected > 0;
    }
}

注意:注册和登录活动都运行良好,但登录后,进程挂起一段时间,这在超时中提到,然后调试窗口中出现错误如下

Username: ashi
2023-02-27 14:48:06.309  3618-3618  FadeMove                com.aumdistributor.loginapp          D  
2023-02-27 14:48:06.309  3618-3618  FadeMove                com.aumdistributor.loginapp          D  Password: ****
2023-02-27 14:48:06.331  3618-3618  Compatibil...geReporter com.aumdistributor.loginapp          D  Compat change id reported: 147798919; UID 10154; state: ENABLED
2023-02-27 14:48:08.927  3618-3765  ibutor.loginap          com.aumdistributor.loginapp          I  Waiting for a blocking GC ProfileSaver
2023-02-27 14:48:09.676  3618-3631  ibutor.loginap          com.aumdistributor.loginapp          I  Background young concurrent copying GC freed 55525(1976KB) AllocSpace objects, 0(0B) LOS objects, 28% free, 4987KB/6966KB, paused 21.888ms total 790.976ms
2023-02-27 14:48:09.676  3618-3765  ibutor.loginap          com.aumdistributor.loginapp          I  WaitForGcToComplete blocked ProfileSaver on ProfileSaver for 748.821ms
2023-02-27 14:48:22.162  3618-3618  AssistStructure         com.aumdistributor.loginapp          I  Flattened final assist data: 2664 bytes, containing 1 windows, 19 views
2023-02-27 14:48:30.326  3618-3618  Choreographer           com.aumdistributor.loginapp          I  Skipped 41 frames!  The application may be doing too much work on its main thread.
2023-02-27 14:48:30.661  3618-3766  OpenGLRenderer          com.aumdistributor.loginapp          I  Davey! duration=990ms; Flags=1, IntendedVsync=551727478915, Vsync=552410812221, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=552422319400, AnimationStart=552422430500, PerformTraversalsStart=552425418600, DrawStart=552685532500, SyncQueued=552704130300, SyncStart=552742871100, IssueDrawCommandsStart=552742989700, SwapBuffers=552750954200, FrameCompleted=552756988200, DequeueBufferDuration=771800, QueueBufferDuration=858700, GpuCompleted=0, 
2023-02-27 14:48:30.697  3618-3766  OpenGLRenderer          com.aumdistributor.loginapp          I  Davey! duration=1044ms; Flags=1, IntendedVsync=551727478915, Vsync=552410812221, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=552422319400, AnimationStart=552422430500, PerformTraversalsStart=552425418600, DrawStart=552758201600, SyncQueued=552758228100, SyncStart=552779646700, IssueDrawCommandsStart=552779723900, SwapBuffers=552782027700, FrameCompleted=552793386400, DequeueBufferDuration=338200, QueueBufferDuration=10224700, GpuCompleted=0, 
2023-02-27 14:48:31.347  3618-3618  Choreographer           com.aumdistributor.loginapp          I  Skipped 60 frames!  The application may be doing too much work on its main thread.
2023-02-27 14:48:31.378  3618-3766  OpenGLRenderer          com.aumdistributor.loginapp          I  Davey! duration=1046ms; Flags=0, IntendedVsync=552427529946, Vsync=553427529906, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=553443540200, AnimationStart=553443587400, PerformTraversalsStart=553455223500, DrawStart=553456486900, SyncQueued=553459256900, SyncStart=553459654900, IssueDrawCommandsStart=553467485800, SwapBuffers=553468956300, FrameCompleted=553474599400, DequeueBufferDuration=3238800, QueueBufferDuration=1298100, GpuCompleted=0, 
2023-02-27 14:48:31.996  3618-3618  Choreographer           com.aumdistributor.loginapp          I  Skipped 35 frames!  The application may be doing too much work on its main thread.
2023-02-27 14:48:32.185  3618-3766  OpenGLRenderer          com.aumdistributor.loginapp          I  Davey! duration=767ms; Flags=1, IntendedVsync=553493946983, Vsync=554077280293, OldestInputEvent=9223372036854775807, NewestInputEvent=0, HandleInputStart=554092326900, AnimationStart=554092348500, PerformTraversalsStart=554092377300, DrawStart=554220729400, SyncQueued=554223347500, SyncStart=554243240500, IssueDrawCommandsStart=554243478100, SwapBuffers=554252239300, FrameCompleted=554281648600, DequeueBufferDuration=19997200, QueueBufferDuration=667100, GpuCompleted=0, 
2023-02-27 14:49:21.083  3618-3618  Compatibil...geReporter com.aumdistributor.loginapp          D  Compat change id reported: 150939131; UID 10154; state: ENABLED
afertimeout set = 2.5 mnts.
com.android.volley.TimeoutError
php mysql database fetch android-volley
© www.soinside.com 2019 - 2024. All rights reserved.