Beiträge von B34ST
-
-
haha Danke damit hat geklappt. Ich weiß nicht warum hatte das aber bereits so ausprobiert und auch als ich das eben abgetippt habe wurde das INVISIBLE nicht erkannt. Danach habe ich deinen Code mal kopiert und da wurde es erkannt...
bt. setVisibility(View.INVISIBLE );
Danke hast mir damit sehr geholfen -
Danke für die Antwort das mit der ID habe ich schon hin bekommen kurz nachdem ich das Thema auf gemacht habe. Und bei der Visibility habe ich das Problem das ich die Buttons nicht normal mit findViewByID deklariere deswegen weiß ich nicht genau wie ich diesen Button ansprechen soll.
Codepublic void doSelect(View view) { if (view.getTag() instanceof Eintrag) { eintrag = (Eintrag) view.getTag(); (new DBRequestTask(MainActivity.this)).execute( getString(R.string.basis_url) + "select.php", "ID", Integer.toString(eintrag.getId())); rid = eintrag.getId(); Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show(); } }
in der Methode möchte ich den Button der diese aufruft(selectButton) nach dem klick unsichtbar machen und einen anderen, den ich noch nicht eingefügt habe, sichtbar machen.
-
-
So und die eigentlich Frage ist wie ich die Ausgelesende ID in einer Variable Speichern kann und wie ich den deleteButton über die App durch das klicken von einem anderem Button sichtbar bzw. wieder unsichtbar machen kann.
-
Eintrag.java
Code
Alles anzeigenpackage com.example.parseapp; public class Eintrag { private int id; private String eintrag; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getEintrag() { return eintrag; } public void setEintrag(String eintrag) { this.eintrag = eintrag; } public Eintrag(int id, String eintrag) { this.id = id; this.eintrag = eintrag; } }
EintragAdapter.java
Java
Alles anzeigenpackage com.example.parseapp; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import java.util.ArrayList; public class EintragAdapter extends BaseAdapter { private ArrayList<Eintrag> eintragListe; private Context context; public EintragAdapter(Context context) { super(); this.eintragListe = new ArrayList<Eintrag>(); this.context = context; } public ArrayList<Eintrag> getEintragListe() { return eintragListe; } @Override public int getCount() { return eintragListe.size(); } @Override public Object getItem(int position) { return eintragListe.get(position); } @Override public long getItemId(int position) { return eintragListe.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); view = inflater.inflate(R.layout.eintrag_layout, parent, false); } TextView textView = (TextView) view.findViewById(R.id.eintragTextView); textView.setText(eintragListe.get(position).getEintrag()); View deleteButton = view.findViewById(R.id.deleteButton); deleteButton.setTag(eintragListe.get(position)); View editButton = view.findViewById(R.id.editButton); editButton.setTag(eintragListe.get(position)); return view; }}
DBRequestTask.java
Java
Alles anzeigenpackage com.example.parseapp; import android.os.AsyncTask; import java.io.BufferedWriter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import static android.provider.Settings.System.getString; public class DBRequestTask extends AsyncTask<String, Void, String> { private DBResultHandler handler; public DBRequestTask(DBResultHandler handler) { super(); this.handler = handler; } @Override protected String doInBackground(String... params) { String ergebnis = ""; try { if (params.length % 2 == 0) throw new Exception("Gerade Zahl an params ist nicht logisch"); URL url = new URL(params[0]); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setReadTimeout(10000); conn.setConnectTimeout(15000); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); if (params.length > 1) { StringBuilder postDaten = new StringBuilder(); boolean erster = true; for (int i = 1; i < params.length; i = i + 2) { if (erster) { erster = false; } else { postDaten.append("&"); } postDaten.append(URLEncoder.encode(params[i], "UTF-8")); postDaten.append("="); postDaten.append(URLEncoder.encode(params[i + 1], "UTF-8")); } OutputStream os = conn.getOutputStream(); BufferedWriter writer = new BufferedWriter( new OutputStreamWriter(os, "UTF-8")); writer.write(postDaten.toString()); writer.flush(); writer.close(); os.close(); } conn.connect(); StringBuilder antwort = new StringBuilder(""); InputStream inputStream = conn.getInputStream(); InputStreamReader reader = new InputStreamReader(inputStream, "UTF-8"); char[] buffer = new char[128]; while (reader.read(buffer) > 0) { antwort.append(buffer); } inputStream.close(); ergebnis = antwort.toString(); } catch (Exception e) { ergebnis = "{\"Status\":[\"-1\",\"HTTP Connection Problem\"]}"; } return ergebnis; } @Override protected void onPostExecute(String result) { handler.ergebnisVerarbeiten(result); } }
-
MainActivity.java
Code
Alles anzeigenpackage com.example.parseapp; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ListView; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements DBResultHandler { private EintragAdapter eintragAdapter; private EditText eingabefeld; private Eintrag eintrag; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.container); eintragAdapter = new EintragAdapter(this); listView.setAdapter(eintragAdapter); ladeDaten(); } private void ladeDaten() { (new DBRequestTask(this)).execute(getString(R.string.basis_url) + "selectm.php"); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.hinzufuegenButton) { neuerEintrag(); return true; } if (id == R.id.selectButton) { reSelect(); return true; } return super.onOptionsItemSelected(item); } private void reSelect() { (new DBRequestTask(this)).execute(getString(R.string.basis_url) + "selectm.php"); } private void neuerEintrag() { AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); alertBuilder.setTitle("Neuer Eintrag"); eingabefeld = new EditText(this); alertBuilder.setView(eingabefeld); alertBuilder.setCancelable(true); alertBuilder.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { (new DBRequestTask(MainActivity.this)).execute( getString(R.string.basis_url) + "insert.php", "Name", eingabefeld.getText().toString()); } }); alertBuilder.create().show(); } public void doEdit(View view) { if (view.getTag() instanceof Eintrag) { eintrag = (Eintrag) view.getTag(); AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this); alertBuilder.setTitle("Eintrag bearbeiten"); eingabefeld = new EditText(this); eingabefeld.setText(eintrag.getEintrag()); alertBuilder.setView(eingabefeld); alertBuilder.setCancelable(true); alertBuilder.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { (new DBRequestTask(MainActivity.this)).execute( getString(R.string.basis_url) + "update.php", "Name", eingabefeld.getText().toString(), "ID", Integer.toString(eintrag.getId())); } }); alertBuilder.create().show(); } } public void doDelete(View view) { if (view.getTag() instanceof Eintrag) { eintrag = (Eintrag) view.getTag(); (new DBRequestTask(MainActivity.this)).execute( getString(R.string.basis_url) + "select.php", "ID", Integer.toString(eintrag.getId())); } } @Override public void ergebnisVerarbeiten(String ergebnis) { try { JSONObject jsonErgebnis = new JSONObject(ergebnis); JSONArray statusArray = jsonErgebnis.getJSONArray("Status"); int status = statusArray.getInt(0); switch (status) { case 0: JSONArray datenArray = jsonErgebnis.getJSONArray("Liste"); eintragAdapter.getEintragListe().clear(); for (int i = 0; i < datenArray.length(); i++) { JSONObject einzelsatz = datenArray.getJSONObject(i); eintragAdapter.getEintragListe().add( new Eintrag(einzelsatz.getInt("ID"), einzelsatz .getString("Name"))); } eintragAdapter.notifyDataSetChanged(); break; case 1: Toast.makeText(this, statusArray.getString(1), Toast.LENGTH_SHORT).show(); ladeDaten(); break; case 2: Toast.makeText(this, statusArray.getString(1), Toast.LENGTH_SHORT).show(); ladeDaten(); break; case 3: Toast.makeText(this, statusArray.getString(1), Toast.LENGTH_SHORT).show(); ladeDaten(); break; default: Toast.makeText(this, statusArray.getString(1), Toast.LENGTH_SHORT).show(); break; } } catch (JSONException e) { Toast.makeText(this, "Serverantwort konnte nicht verarbeitet werden", Toast.LENGTH_SHORT).show(); } } }
-
Hey habe nochmal eine Frage bzw. können auch noch mehr werden
Und zwar möchte ich einen Delete Button erst sichbar machen nachdem ich einen anderen Button geklickt habe oder auch einfach den Delete Button in eine neue Activity übernehmen dann muss ich nicht mit der sichtbarkeit bzw. meinen Scrips spielen.
Hier mein Quellcode (ich poste einfach mal alles)eintrag_layout.xml
Code
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <TextView android:id="@+id/eintragTextView" android:layout_width="0dip" android:layout_height="wrap_content" android:layout_weight="1" android:text="" android:textSize="20dip" /> <ImageButton android:id="@+id/editButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="bearbeiten" android:onClick="doEdit" android:src="@android:drawable/ic_menu_edit" /> <ImageButton android:id="@+id/deleteButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="löschen" android:onClick="doDelete" android:src="@android:drawable/ic_menu_zoom" android:visibility="visible" /> </LinearLayout>
menu.xmlCode
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="@tools:sample/date/ddmmyy"> <item android:id="@+id/selectButton" android:icon="@android:drawable/ic_menu_revert" android:title="@string/liste_start" app:showAsAction="always" /> <item android:id="@+id/hinzufuegenButton" android:icon="@android:drawable/ic_menu_add" android:title="@string/neuer_eintrag" app:showAsAction="always" /> </menu>
styles.xmlCode
Alles anzeigen<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
stings.xmlCode<resources> <string name="app_name">ParseApp</string> <string name="basis_url">http://10.222.100.128/</string> <string name="hinzufuegenButton">Aktualisieren</string> <string name="neuerEintrag">Neuer Eintrag</string> <string name="neuer_eintrag">Neuer Eintrag</string> <string name="liste_start">Start</string> </resources>
-
Ich schau mir das mal an. Danke für den Tipp.
-
ja das Stimmt habe auch schon bemerkt das das was ich geschrieben habe murks war Aber danke für die Hilfe. Meinte in dem Beitrag eigentlich die Actionbar die nicht angezeigt wurde aber habe es jetzt hin bekommen.
-
Hey Leute ich hoffe irgendwer kann mir hierbei weiter helfen. Meine App hat bereits eine Listview bei der die Einträge direct per PHP Script aus meiner Datenbank ausgelesen werden. Darüber kann ich die Einträge auch bearbeiten und Löschen. Zum Anlegen neuer Einträge wollte ich eine Toolbar einfügen mit einem Button zum einfügen. Diese Toolbar wird jedoch nicht in der App angezeigt und ich konnte bis jetzt auch noch keine Lösung finden vielleicht kann mir jemand von euch da weiter helfen.
activity_main.xml
Code<ListView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.parseapp.MainActivity" tools:ignore="MergeRootFrame"/>
menu.xmlCode
Alles anzeigen<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" tools:context="com.example.parseapp.MainActivity" > <item android:id="@+id/hinzufuegenButton" android:icon="@android:drawable/ic_menu_add" android:showAsAction="always" android:title="@string/neuer_eintrag" tools:ignore="AppCompatResource"> </item> </menu>
styles.xml
Code
Alles anzeigen<resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style> </resources>
MainActivity.java
Code
Alles anzeigenimport android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity implements DBResultHandler { private EintragAdapter eintragAdapter; private EditText eingabefeld; private Eintrag eintrag; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView listView = (ListView) findViewById(R.id.container); eintragAdapter = new EintragAdapter(this); listView.setAdapter(eintragAdapter); ladeDaten(); } private void ladeDaten() { (new DBRequestTask(this)).execute(getString(R.string.basis_url) + "select.php"); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); return true; }
Das sind die Ausschnitte die für das menu meiner Meinung nach wichtig sind.
Ich bedanke mich schon mal im Voraus. -
-
Ich habe es jetzt selbst geschafft!!!
-
Hey, ich beschäftige mich noch nicht so lang mit Android Studio und stoße dort so auf meine Probleme. Ich habe mir auf Debian 10 eine Datenbank angelegt welche ich mit einem PHP Script welches auf meinem Apache2 Server läuft abfrage. Der Server ist nur innerhalb meines Netzwerkes zu erreichen und ich möchte mir die Abfrage des Scrips in meiner App anzeigen lassen, jedoch scheitere ich schon am Verbindungsaufbau zum Server. Die Manifest.xml habe ich schon die Permision zugeteilt was ja jetzt kein Problem ist. Nach Vielem hin und her mit der App wo ich alles mögliche ausprobiert habe bin ich ich jetzt bei diesem Haufen von nichts angekommen:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final TextView text = (TextView) findViewById(R.id.textview);
setContentView(R.layout.activity_main);
TextView textView = new TextView(this)
try {
URL url = new URL("http://www.android.com/");
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
InputStream in = new BufferedInputStream(urlConnection.getInputStream());
readStream(in);
}
finally {
urlConnection.disconnect();
}Die App lässt sich auch nicht einmal starten und aus den Error Meldungen werde ich auch nicht schlau. Habt ihr da vielleicht eine Idee wie ich das aufbauen kann das ich erstmal wenigstens die Verbindung hin bekomme den Rest Schau ich dann wieder selbst weiter. PS: bin ein blutiger Anfänger...