Ich nehm an wegen dem String der mit im Code drin war und auf die Recipe.class zugegriffen hat obwohl das gar nicht nötig war?
Beiträge von GenetixX
-
-
Perfekt funktioniert Vielen Dank an dich.
Jetzt muss ich das "nur" noch mit den speichern hinbekommen.
-
Danke erstmal für die Mühe.
Ich hab da allerdings eine Frage und zwar wieso wird die Datei am ende gelöscht? Werden die Listen dann nicht nach Beenden der App wieder in den Anfangszustand gesetzt?
-
Dein Code funktioniert höchstwahrscheinlich auch allerdings muss dann auch die Recipe.class verändert geben, denn er gibt mir bei beiden Möglichkeiten "incompatible types"
Und natürlich jeweilige Fehler bei "Recipes2", da diese Datei ja nicht mehr existiert sondern wie du schon meintest alles über Recipe läuft.
-
Ich denke ich bin jetzt sowieso an einem Punkt wo es mir nichts bringt an meiner Idee weiterzuprogrammieren ohne einen Programmiere "einzustellen" (was nicht möglich sein wird, da kein Geld).
Ich dachte bis eben mein Problem ist das Speichern der Liste mit SharedPrefs aber so wie es aussieht ist das effektiv nur mit SQL möglich was sehr viel Coden ist.
Aber jogimuc hat wohl in der Sache recht, dass das adden des Eintrages in der 2. Liste nicht mal funktioniert und ich weiß absolut nicht wie ich das in irgendeiner Weise lösen könnte.
-
Ich hab mir davor ein Tutorial angeguckt um zu lernen wie das ganze funktioniert und hab erstmal den Code genommen um damit ein paar Sachen auszuprobieren.
In meinem eigentlich Projekt ist er nicht drin also keine Sorgen habe nicht vor zum Schluss Urheberrechtsverletzung zu betreibe ^^.
Mit Recipe 2 sollte erstmal ein Test sein ob damit der Fehler behoben wäre. Und wollte dann mit der eigentlichen Recipe.class weiterarbeiten hat aber bis her nicht so funktioniert wie es soll.
-
Ja hab ich schon mal von gehört. Ist SQL ähnlich. Allerdings weiß ich nicht wie man es korrekt anwendet falls du das meinst.
-
Also erstmal vielen Dank für die Mühe die du dir hier machst. Ich dachte damals, dass nur die Suchroutine fehlen würde und hätte nicht gedacht, dass es so schwer werden würde eine Liste von Daten zu speichern.
Meine Recipe.class sieht so aus:
Java
Alles anzeigenimport android.content.Context; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.io.InputStream; import java.util.ArrayList; public class Recipe { public String title; public String description; public String imageUrl; public String instructionUrl; public String label; public static ArrayList<Recipe> getRecipesFromFile(String filename, Context context){ final ArrayList<Recipe> recipeList = new ArrayList<>(); try { // Load data String jsonString = loadJsonFromAsset("recipes.json", context); JSONObject json = new JSONObject(jsonString); JSONArray recipes = json.getJSONArray("recipes"); // Get Recipe objects from data for(int i = 0; i < recipes.length(); i++){ Recipe recipe = new Recipe(); recipe.title = recipes.getJSONObject(i).getString("title"); recipeList.add(recipe); } } catch (JSONException e) { e.printStackTrace(); } return recipeList; } private static String loadJsonFromAsset(String filename, Context context) { String json = null; try { InputStream is = context.getAssets().open(filename); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); json = new String(buffer, "UTF-8"); } catch (java.io.IOException ex) { ex.printStackTrace(); return null; } return json; } }
Mein Ziel ist es halt in dem Fall eine Liste mit Einträgen zu haben, in der der User einzelne Sachen auswählen kann und diese einer anderen Liste hinzufügen kann aus der dann später die Suchroutine suchen soll.
Und dies sollte wenn möglich ein ansprechendes Layout haben, deswegen der Custom Adapter und die umstände.Und mit "funktionieren" meinte ich, dass es funktioniert Einträge aus der Liste zu löschen in der Laufzeit :).
-
Für den Code bin ich auch sehr dankbar aber ich brauche meinen jetzigen weil der im restlichen Code implementiert ist und den kann ich leider nicht einfach ersetzen.
Wie gesagt eigentlich dürfte das doch nicht so schwer sein
-
Ich kenne den Jungen der das Video gemacht habe aber er hat nicht so viel Zeit für die einzelnen Sachen aber trotzdem danke für den Tipp
Hab schon so einiges probiert und komme ehrlich gesagt nicht weiter. Es kann doch nicht so schwer sein es hinzubekommen das eine Activity die Veränderungen speichert die an ihr unternommen werden und diese bei Neustart wieder aufzurufen
-
Die Möglichkeit mit SQL ist denke ich auch besser allerdings fehlt mir bei SQL das Wissen um es gut genug hinzubekommen.
Die 1. ArrayList holt sich die Einträge aus einer JSON Datei.
-
Du meintest ja, dass der String einen leere Eintrag hat. Wobei das ja Absicht ist , da die 2. Liste am Anfang leer sein soll um dann die Daten der 1. Liste in die 2. zu verschieben.
Und die Frage ist ob der String dann leer sein kann, da die Liste ja eben auch leer sein soll oder ob ich das so nicht machen kann?2. Frage ist: Wie du schon meintest müsste ich die Daten speichern, da wenn ich in die 2. Activity wechsel, dann die 1. Activity in die Ausgangsposition wechselt.
Speichern tu ich ja in dem Fall mit SharedPreference. Aber wie genau sieht das dann im Code aus?
-
Soll ja auch eine leere Liste sein, in die ich dann Items von Liste 1 rein schieben möchte.
Oder geht das dann so nicht?
-
Ok jetzt klappt alles mit den Verschieben. Zumindest wirft er jetzt keine Fehler mehr aus Danke wie gesagt nochmal viel mals.
Jetzt versuch ich das mit dem Zwischenspeicher der Daten.
-
Ich hab mir das schon alles durchgelesen ich weiß allerdings immer noch nicht wieso er bei diesem Code "selectedRecipe" unterstreicht. Bzw ich weiß es schon. Weil die "recipeList2" "Recipe2" nutzt und nicht "Recipe" aber ich weiß nicht wie ich das lösen kann.
Code
Alles anzeigenmListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Recipe selectedRecipe = recipeList.get(position); recipeList.remove(selectedRecipe); recipeList2.add(selectedRecipe); adapter.notifyDataSetChanged(); } });
-
Ich weiß ja nicht wie ich sie benutze. Sprich wie ich es hinbekomme, dass der Eintrag von Liste 1 zu Liste 2 verschoben wird.
Und das Speichern kommt ja noch hinzu aber erstmal muss ich ja das eine schaffen um mich um das andere Problem kümmern zu können.
-
Ich deklariere sie 2 mal weil sie sonst nicht von der ersten Activity erkannt wird.
Also TestActivity.recipeList2.add(selectedRecipe) erkennt die recipeList2 nur wenn sie außerhalb von onCreate deklariert wird.Aber es kommt halt "add "com.alltherecipes.Recipe2" cannot be applied in Arraylist to "com.alltherecipes.Recipe"" weil eben keine Werte zugewiesen sind, weil ich nicht weiß wie ich das mache.
Ok klingt logisch ... und wie mach ich das?
-
Ich hab es jetzt geschafft, dass er bei meinem code die 2. Liste erkennt:
MainActivity Class:
Code
Alles anzeigenpublic class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.recipe_list_view); final ArrayList<Recipe> recipeList = Recipe.getRecipesFromFile("recipes.json", this); String[] listItems = new String[recipeList.size()]; for(int i = 0; i < recipeList.size(); i++){ Recipe recipe = recipeList.get(i); listItems[i] = recipe.title; } final RecipeAdapter adapter = new RecipeAdapter(this, recipeList); mListView.setAdapter(adapter); final Context context = this; mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Recipe selectedRecipe = recipeList.get(position); recipeList.remove(selectedRecipe); TestActivity.recipeList2.add(selectedRecipe); adapter.notifyDataSetChanged(); } }); }; public void test_onClick(View view) { Intent intent = new Intent(MainActivity.this, TestActivity.class); startActivity(intent); } private ListView mListView; }
TestActivity.class
Code
Alles anzeigenpublic class TestActivity extends AppCompatActivity { static ArrayList<Recipe2> recipeList2; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); mListView = (ListView) findViewById(R.id.testlist2); final ArrayList<Recipe2> recipeList2 = Recipe2.getRecipesFromFile("recipes2.json", this); String[] listItems = new String[recipeList2.size()]; for(int i = 0; i < recipeList2.size(); i++){ Recipe2 recipe2 = recipeList2.get(i); listItems[i] = recipe2.title; } final RecipeAdapter2 adapter = new RecipeAdapter2 (this, recipeList2); mListView.setAdapter(adapter); final Context context = this; mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Recipe2 selectedRecipe = recipeList2.get(position); recipeList2.remove(selectedRecipe); adapter.notifyDataSetChanged(); } }); }; private ListView mListView; }
Allerdings bekommt er bei der Mainactivity bei "TestActivity.recipelist2.add(selectedRecipe)" einen Fehler und zwar:
"add "com.alltherecipes.Recipe2" cannot be applied in Arraylist to "com.alltherecipes.Recipe"" -
Danke erstmal werde das mal ausprobieren.
Allerdings habe ich bereits den Custom Adapter in meinem Fall heißt er "RecipeAdapter".
Und die Daten werden in einer JSON Datei gespeichert. Hatte jetzt eigentlich nur nach einer Lösung gesucht für das hinzufügen des Eintrages in eine andere Liste:
Der Rest hat ja funktioniert
-
Weil wenn ich das final wegnehme, dann kommen 2 Fehlermeldungen bei der Variable "recipeList" und zwar: "...needs to be declared final"