D
DrLiightninG
Neues Mitglied
- 1
Hallo zusammen,
ich habe versucht die Daten aus meiner MySQL Datenbank mit JSON auszulesen und die Objekte anschließend in einer ListView anzeigen zu lassen. Mittlerweile funktioniert es, dass ich die Daten aus der Datenbank auslesen kann. Jedoch lassen sich diese bei mir noch nicht in einer ListView anzeigen, da diese anscheinend leer bleibt.
Den Fehler habe ich bisher noch nicht gefunden.
An dieser Stelle soll die JSON Ausgabe in "MainActivity/PlaceholderFragment" erfolgen:
Ebenfalls aus "MainActivity/PlaceholderFragment":
Aus "BackgroundTask":
Aus der Methode "doInBackground" von "BackgroundTask":
Die Methode "onPostExecute" aus "BackgroundTask":
Die Klasse "PartyItem":
Die Klasse "PartyAdapter":
Die "list_item.xml" Datei (Layout Datei für ListView Item):
Der JSON String sieht folgendermaßen aus:
Fehlerausgabe:
Ich hoffe ihr könnt mir weiterhelfen.
Gruß
Jan
ich habe versucht die Daten aus meiner MySQL Datenbank mit JSON auszulesen und die Objekte anschließend in einer ListView anzeigen zu lassen. Mittlerweile funktioniert es, dass ich die Daten aus der Datenbank auslesen kann. Jedoch lassen sich diese bei mir noch nicht in einer ListView anzeigen, da diese anscheinend leer bleibt.
Den Fehler habe ich bisher noch nicht gefunden.
An dieser Stelle soll die JSON Ausgabe in "MainActivity/PlaceholderFragment" erfolgen:
Code:
else if(getArguments().getInt(ARG_SECTION_NUMBER) == 2) {
rootView = inflater.inflate(R.layout.fragment_second, container, false);
aktualisierenB = (Button) rootView.findViewById(R.id.refresh_b);
partyList = (ListView) rootView.findViewById(R.id.listView);
partyAdapter = new PartyAdapter(getActivity(),R.layout.list_item);
partyList.setAdapter(partyAdapter);
method = "suchen";
aktualisierenB.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
BackgroundTask backgroundTask = new BackgroundTask(getActivity());
setzeBackgroundTask(backgroundTask);
backgroundTask.execute(method);
}
});
BackgroundTask backgroundTask = new BackgroundTask(getActivity());
backgroundTask.getJsonString(this);
backgroundTask.execute(method);
return rootView;
}
Ebenfalls aus "MainActivity/PlaceholderFragment":
Code:
public void setzeBackgroundTask(BackgroundTask bT) { //Übergibt die Klasse "MainActivity.PlaceholderFragment" an "BackgroundTask", um später die Methode "setzeString" aufrufen zu können
bT.getJsonString(this);
}
public void setzeString(String str) { //wird von "BackgroundTask" aufgerufen, um den JSON String zu übergeben
json_string = str;
this.parseJSON();
}
public void parseJSON() { //Umwandlung von JSON String in eine ListView
if(json_string == null) {
Toast.makeText(getActivity().getApplicationContext(), "Keine Partys gefunden",
Toast.LENGTH_LONG).show();
}
else { //Suchergebnisse anzeigen
//aktualisierenB.setText(json_string);
Toast.makeText(getActivity().getApplicationContext(), "Partys anzeigen",
Toast.LENGTH_LONG).show(); //Diese Ausgabe erhalte ich in der App, sehe jedoch keine ListView
JSONObject jsonObject;
JSONArray jsonArray;
String partyName;
String clubName;
String veranstalter;
String datum;
String zeit;
String adresse;
String stadt;
String plz;
String ticketverkauf;
String age;
int zusagen;
int id;
try {
jsonObject = new JSONObject(json_string);
jsonArray = jsonObject.getJSONArray("server_response");
int count = 0;
while(count < jsonObject.length()) {
JSONObject JO = jsonArray.getJSONObject(count);
partyName = JO.getString("party_name");
clubName = JO.getString("club_name");
veranstalter = JO.getString("veranstalter");
datum = JO.getString("datum");
zeit = JO.getString("zeit");
adresse = JO.getString("adresse");
stadt = JO.getString("stadt");
plz = JO.getString("plz");
ticketverkauf = JO.getString("ticketverkauf");
age = JO.getString("age");
id = JO.getInt("id");
zusagen = JO.getInt("zusagen");
PartyItem partyItem = new PartyItem(partyName,zeit,adresse);
partyAdapter.add(partyItem);
count ++;
}
} catch (JSONException e){
e.printStackTrace();
}
}
}
Aus "BackgroundTask":
Code:
public void getJsonString(MainActivity.PlaceholderFragment act) { //Übergabe von "MainActivity.PlaceholderFragment" an "BackgroundTask"
activity = act;
}
Aus der Methode "doInBackground" von "BackgroundTask":
Code:
else if(method.equals("suchen")) { //Hier werden die Daten der MySQL Datenbank ausgelesen
try {
suchen = true;
URL url = new URL(json_url);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String JSON_STRING;
while ((JSON_STRING = bufferedReader.readLine()) != null) {
stringBuilder.append(JSON_STRING+"\n");
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
return stringBuilder.toString().trim();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
Die Methode "onPostExecute" aus "BackgroundTask":
Code:
protected void onPostExecute(String result) {
//super.onPostExecute(aVoid);
if(suchen == false) {
if (result.equals("Party eingetragen")) {
Toast.makeText(ctx, result, Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ctx, "Datenbank-Fehler beim Eintragen", Toast.LENGTH_LONG).show();
}
}
else //Hier wird der JSON String an "MainActivity/PlaceholderFragment" übergeben, um ihn dort in einer ListView darzustellen
{
jString = result;
activity.setzeString(jString);
}
}
Die Klasse "PartyItem":
Code:
public class PartyItem {
private String partyName;
private String partyZeit;
private String partyAdresse;
public PartyItem(String pName, String pZeit, String pAdresse) {
this.setPartyName(pName);
this.setPartyZeit(pZeit);
this.setPartyAdresse(pAdresse);
}
public void setPartyName(String pName) {
partyName = pName;
}
public void setPartyZeit(String pZeit) {
partyZeit = pZeit;
}
public void setPartyAdresse(String pAdresse) {
partyAdresse = pAdresse;
}
public String getPartyName() {
return partyName;
}
public String getPartyZeit() {
return partyZeit;
}
public String getPartyAdresse() {
return partyAdresse;
}
}
Die Klasse "PartyAdapter":
Code:
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Jan on 06.03.2016.
*/
public class PartyAdapter extends ArrayAdapter{
List list = new ArrayList();
public PartyAdapter(Context context, int resource) {
super(context, resource);
}
public void add(PartyItem object) {
super.add(object);
list.add(object);
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
row = convertView;
ItemHolder itemHolder;
if(row == null) {
LayoutInflater layoutInflater = (LayoutInflater)this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = layoutInflater.inflate(R.layout.list_item,parent,false);
itemHolder = new ItemHolder();
itemHolder.name_tv = (TextView) row.findViewById(R.id.party_name);
itemHolder.name_tv = (TextView) row.findViewById(R.id.party_adresse);
itemHolder.name_tv = (TextView) row.findViewById(R.id.party_zeit);
row.setTag(itemHolder);
} else {
itemHolder = (ItemHolder) row.getTag();
}
PartyItem partyItem = (PartyItem)this.getItem(position);
itemHolder.name_tv.setText(partyItem.getPartyName());
itemHolder.adresse_tv.setText(partyItem.getPartyAdresse());
itemHolder.zeit_tv.setText(partyItem.getPartyZeit());
return row;
}
static class ItemHolder {
TextView name_tv, zeit_tv, adresse_tv;
}
}
Die "list_item.xml" Datei (Layout Datei für ListView Item):
Code:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="2dp" >
<!-- Wird derzeit nicht verwendet -->
<ImageView
android:id="@+id/profile_pic"
android:layout_width="70dp"
android:layout_height="70dp"
android:contentDescription="desc"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Party Name"
android:id="@+id/party_name"
android:layout_alignTop="@+id/profile_pic"
android:layout_toRightOf="@+id/profile_pic"
android:layout_toEndOf="@+id/profile_pic"
android:layout_marginLeft="25dp"
android:layout_marginStart="25dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Adresse"
android:id="@+id/party_adresse"
android:layout_below="@+id/party_zeit"
android:layout_alignLeft="@+id/party_zeit"
android:layout_alignStart="@+id/party_zeit" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Datum und Zeit"
android:id="@+id/party_zeit"
android:layout_below="@+id/party_name"
android:layout_alignLeft="@+id/party_name"
android:layout_alignStart="@+id/party_name" />
<!-- Wird derzeit nicht verwendet -->
<ImageView
android:id="@+id/age_pic"
android:layout_width="40dp"
android:layout_height="40dp"
android:contentDescription="desc"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
Der JSON String sieht folgendermaßen aus:
Code:
Error description: object(mysqli_result) #2 (5) {
["current_field"]= >
int(0)["field_count"] =>
int(12)["lengths"] =>
NULL["num_rows"] =>
int(2)["type"] =>
int(0)
} {
"server_response": [{
"id": "3",
"party_name": "Name",
"club_name": "Club",
"veranstalter": "Veranstalter",
"datum": "Datum",
"zeit": "Zeit",
"age": "Age",
"adresse": "Adresse",
"stadt": "Stadt",
"plz": "PLZ",
"ticketverkauf": "Tickets",
"zusagen": "5"
}, {
"id": "4",
"party_name": "White by night ",
"club_name": "Revolution ",
"veranstalter": "college break ",
"datum": "heute",
"zeit": "jetzt ",
"age": "16",
"adresse": "illinghauser weg 10b",
"stadt": "neuss",
"plz": "41470",
"ticketverkauf": "bei mir",
"zusagen": "0"
}]
}
Fehlerausgabe:
Code:
Error: Parse error on line 1:
Error description: o
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined'
Ich hoffe ihr könnt mir weiterhelfen.
Gruß
Jan