-1

Я новичок в программировании на Android и изучении Sqlite. Я работаю над проектом, в котором пользователь может искать фирменное наименование автомобиля (например, ferrari) в заполненной базе данных, и результаты будут отображаться в другом виде как список всех моделей автомобилей с одинаковым брендом в базе данных. Я искал разные методы (ArrayAdapter, Cursor, Intent), но я не уверен, что я на правильном пути. У меня есть четыре вида деятельности в общей сложности: CarDbAdapter.java (SqliteDatabase) включает в себя этот метод, чтобы найти марку автомобиляПоиск базы данных android sqlite, возвращение результатов в другую деятельность как listview

public ArrayList<Car> findCar(String Car) { 
String car = new String(); 
ArrayList<Car> car= new ArrayList<Car>(); 
SQLiteDatabase db = getReadableDatabase(); 
Cursor cursor = db.rawQuery("SELECT * FROM cars WHERE brand=?", new   
String[]{car}); 
if (cursor.moveToFirst()) { 
while (!cursor.isAfterLast()) { 
Car c = new Car 
(cursor.getInt(cursor.getColumnIndex("id")),cursor.getString(cursor.getColumnIndex("brand")), 
          cursor.getString(cursor.getColumnIndex("model")), 
          cursor.getString(cursor.getColumnIndex("reviews"))); 
      car.add(c); 
      cursor.moveToNext(); 
     } 
    } 
    cursor.close(); 
    return car; 
} 

RequestCar.java это где пользователи могут запросить информацию автомобиля из базы данных через EditText и кнопки

public class RequestCar extends AppCompatActivity { 
CarDbAdapter db; 
Button search; 
EditText brand, model, reviews; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_request_car); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    db = new CarDbAdapter(this); 

    search = (Button) findViewById(R.id.searchButton); 
    brand= (EditText) findViewById(R.id.brand); 
    model= (EditText) findViewById(R.id.model); 
    reviews = (EditText) findViewById(R.id.reviews); 


    searchCar(); 

} 
// This is where it goes wrong. Do I need to initialise another arraylist?As I've already done it on CarDbAdapter.java 

public void searchCar() { 
    search.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      ArrayList<Car> carIntent= db.searchCar(brand.getText().toString()); 
      Intent intent = new Intent(RequestCar.this, CarList.class); 
      intent.putStringArrayListExtra("car", carIntent); 
      startActivity(intent); 

     } 
    }); 

CarList.java где я называю намерение от основной деятельности и просматривать результаты в виде списка.

public class CarList extends AppCompatActivity { 
CarDbAdapter db; 
ListView carList; 
String uriString; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_car_list); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    db = new CarDbAdapter(this); 


    carList = (ListView) findViewById(R.id.carList); 

    handleIntent(); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
        .setAction("Action", null).show(); 
     } 
    }); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
} 

public void handleIntent(){ 
    Intent intent = getIntent(); 
    uriString = intent.getStringExtra("car"); 

    } 
} 
// This is what I've done so far because I'm getting confused with loads of tutorials and I'm not sure which one to follow. I've read about tutorials suggesting ArrayAdapter for creating the list but first I need to know how to get the Intent from mainactivity then maybe I can learn more about the ArrayAdapter. 

Car.java

public class Car{ 

int id = 0; 
String brand = null; 
String model = null; 
String reviews = null; 

public Car(int id, String brand, String model, String reviews) { 
    this.id = id; 
    this.brand= brand; 
    this.model = model; 
    this.reviews = reviews; 
} 


public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public String getBrand() { 

    return brand; 
} 

public void setBrand(String brand) { 

    this.brand= brand; 
} 

public String getModel() { 

    return model; 
} 

public void setModel(String model) { 

    this.model= model; 
} 

public String getReviews() { 
    return reviews; 
} 

public void setReviews(String reviews) { 
    this.reviews= reviews; 
} 

}

Любая помощь будет оценена. Если бы кто-нибудь мог вести меня с уже существующими учебниками, которые я мог бы следовать, это было бы фантастически. Спасибо

ответ

0

В вашем CarDbAdapter.java, это первые три строки:

public ArrayList<Car> findCar(String Car) { 
String car = new String(); 
ArrayList<Car> car= new ArrayList<Car>(); 

Вы создаете метод, который возвращает ArrayList из типа автомобиля (класс). то вы передаете String с именем «Car» (что то же самое относится к вашему классу Car). Внутри метода вы создаете пустую строку с именем «автомобиль», а затем создаете ArrayList типа Car (класс) с таким же именем «автомобиль» (который перезаписывает ваш ранее созданный String «автомобиль».

Это не смущает только нас, но и ваш компилятор Попробуйте переименовать переменные и снова запустить приложение

Это предложение о том, как я хотел бы переписать findCar метод:..

public ArrayList<Car> findCar(String brand_text) { 
ArrayList<Car> cars= new ArrayList<Car>(); 
SQLiteDatabase db = getReadableDatabase(); 
Cursor cursor = db.rawQuery("SELECT * FROM cars WHERE brand=?", new   
String[]{brand_text}); 
if (cursor.moveToFirst()) { 
    while (!cursor.isAfterLast()) { 
    Car c = new Car (cursor.getInt(cursor.getColumnIndex("id")),cursor.getString(cursor.getColumnIndex("brand")), 
          cursor.getString(cursor.getColumnIndex("model")), 
          cursor.getString(cursor.getColumnIndex("reviews"))); 
    cars.add(c); 
    cursor.moveToNext(); 
    } 
} 
cursor.close(); 
return cars; 

}

Таким образом, вы используете «brand_text» в качестве строкового значения вашего бренда (например, «ferrari») и возвращаете автомобили ArrayList класса Car.

Что касается ваших сомнений, намерения используются (также) для передачи параметров другим действиям, курсоры используются (также) для возврата строк из вашей базы данных, а ArrayAdapters используются для заполнения списков ListView. Это не относится к , которое вы должны использовать. Фактически вам придется использовать их все, если вы планируете использовать приложение, как вы упомянули в своем вопросе.

+0

Это очень помогло мне. Спасибо!! –