-1

Ich bin neu in Android-Programmierung und lernen über Sqlite. Ich arbeite an einem Projekt, wo ein Benutzer nach einem Automarken (z. B. Ferrari) in der befüllten Datenbank suchen kann und die Ergebnisse in einer anderen Aktivität als Listenansicht aller Modelle der Autos mit derselben Marke in der Datenbank angezeigt werden. Ich habe nach verschiedenen Methoden gesucht (ArrayAdapter, Cursor, Intent), aber ich bin mir nicht sicher, ob ich auf dem richtigen Weg bin. Ich habe vier Aktivitäten insgesamt: CarDbAdapter.java (SQLiteDatabase) beinhaltet diese Methode die AutomarkeSuche android sqlite Datenbank, Ergebnisse zu einer anderen Aktivität als Listview

kann
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 das ist, wo Benutzer Info anfordern aus der Datenbank durch EditText und Schaltfläche Auto finden

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, wo ich die Absicht von Haupttätigkeit aufrufen und die Ergebnisse als Liste anzeigen.

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; 
} 

}

Jede Hilfe würde geschätzt. Wenn mich jemand mit bereits vorhandenen Tutorials anleiten könnte, wäre ich fantastisch. Danke

Antwort

0

In Ihrem CarDbAdapter.java, das sind die ersten drei Zeilen:

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

Sie sind ein Verfahren zu schaffen, die eine Arraylist von Car (Klasse) gibt ein. dann übergeben Sie einen String mit dem Namen "Car" (der Ihrer Car-Klasse entspricht). Innerhalb der Methode, erstellen Sie eine leere Zeichenfolge mit dem Namen "Auto", und dann erstellen Sie eine ArrayList des Typs Auto (Klasse), mit dem gleichen Namen "Auto"

Dies ist verwirrend, nicht nur uns, sondern auch Ihre Compiler versuchen, die Variablen umbenennen und Ihre Anwendung läuft wieder

Dies ist ein Vorschlag, wie ich Ihre findCar Methode umschreiben würde:..

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; 

}

Auf diese Weise verwenden Sie "brand_text" als Zeichenfolgenwert Ihrer Marke (z. B. "ferrari") und geben ein ArrayList-Fahrzeug des Klassentyps Auto zurück.

Zu Ihren Zweifeln werden Intents (auch) verwendet, um Parameter an andere Aktivitäten zu übergeben, Cursor werden (auch) verwendet, um Zeilen aus Ihrer Datenbank zurückzugeben, und ArrayAdapter werden verwendet, um Ihre ListViews zu füllen. Es ist keine Frage von welche Sie verwenden sollten. Sie müssen tatsächlich alle verwenden, wenn Sie die Anwendung wie in Ihrer Frage erwähnt verwenden möchten.

+0

Das hat mir wirklich sehr geholfen. Vielen Dank!! –

Verwandte Themen