Android ListView wirft nur null-werte aus DB aus.

  • 5 Antworten
  • Letztes Antwortdatum
L

likedue

Ambitioniertes Mitglied
1
Hey Leute,

ich versuche über eine php-datei bestimmte Werte aus einer MySQL-Datenbank auszulesen.

Es scheint mehr oder minder zu funktionieren.
Leider werden alle Werte als null ausgeworfen.

Hier die php die ich nutze um die Dateien zu holen:

PHP:
<?php

$response = array();


require_once __DIR__ . '/db_connect.php';

$db = new DB_CONNECT();



if (isset($_GET["id"])) 
{
    $id = $_GET['id'];

    $result = mysql_query('set names utf8');
    $result = mysql_query("SELECT * FROM daten WHERE id = $id")or die(mysql_error());


	if (mysql_num_rows($result) > 0) 
	{

		$response["products"] = array();
		while ($row = mysql_fetch_array($result)) 
		{
		
		$product = array();
                $product["wid"] 	     = $result["wid"];
                $product["user"]       = $result["user"];
	        $product["info"]        = $result["info"];
		$product["comment"] = $result["comment"];
		$product["stat"]       = $result["stat"];

        array_push($response["products"], $product);
		}

		$response["success"] = 1;

		echo json_encode($response);
	} 
	else 
	{

    $response["success"] = 0;
    $response["message"] = "No products found";

    echo json_encode($response);
	}
} 	
?>

Also die Php holt tatsächlich alle Zeilen und auch entsprechende Informationen, jedoch wirft die ListView wie gesagt für alles lediglich null aus.

Ich verzweifle da etwas dran.

Vielen Dank für eure Hilfe!
 
Hi,
Verstehe ich das richtig, du stellst einen getRequest an deinen Server und solltest Daten JSON-formatiert zurückbekommen?

Gib doch mal bei Android das JSON-Object mit .toString(3) aus. Dann siehste ob du die Daten sauber empfängst. Wenn das stimmt, liest du entweder die Werte nicht korrekt aus dem JSON-Object aus oder bei deiner Listview geht etwas schief. So ganz ohne Java-Code ist das schwer zu beurteilen. PHP kenne ich mich gar nicht aus.
 
Den Source kann ich natürlich auch liefern.

Code:
public class TweenerActivity extends ListActivity {
	
	private ProgressDialog pDialog;
	private ProgressDialog pDialog1;

	JSONParser jParser = new JSONParser();
	JSONParser jsonParser = new JSONParser();
	ArrayList<HashMap<String, String>> productsList;


	private static String url_all_user_details = "http://10.10.0.2/get_all_user_details.php";
	private static final String url_single_details = "http://10.10.0.2/get_single_details.php";
	// JSON Node names
	private static final String TAG_SUCCESS = "success";
	private static final String TAG_DETAILS = "products";
	private static final String TAG_PRODUCT = "product";
	private static final String TAG_WID = "wid";	
	private static final String TAG_ID = "id";
	private static final String TAG_USER = "user";
	private static final String TAG_INFO = "info";
	private static final String TAG_COMMENT = "COMMENT";
	
	String id;
	String user;
	String wid;	   							
	String info; 
	String comment;					
	String stat;
	TextView txtNamear;
	JSONArray products;
	
	@Override
	public void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.tweener);
		
		StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
		.permitAll().build();
		StrictMode.setThreadPolicy(policy);	

		TextView txtNamear = (TextView) findViewById(R.id.GesVerlauftxt);
		txtNamear.setText("Verlauf für: ");	
		TextView txtNamear2 = (TextView) findViewById(R.id.useruni);	
		txtNamear2.setText(user);		
		
		Intent i = getIntent();	
		user = i.getStringExtra(TAG_USER);	
			
		Intent i3 = getIntent();	
		id = i3.getStringExtra(TAG_ID);
		
		Intent i1 = getIntent();	
		id = i1.getStringExtra(TAG_ID);	
		
		productsList = new ArrayList<HashMap<String, String>>();

		new LoadAllDetails().execute();
		new GetUserDetails().execute();

		ListView lv = getListView();			
	}
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);

		if (resultCode == 100) {

			Intent intent = getIntent();
			finish();
			startActivity(intent);
		}
	}	
	class GetUserDetails extends AsyncTask<String, String, String> 
	{
		@Override
		protected void onPreExecute() 
		{
			super.onPreExecute();
			pDialog = new ProgressDialog(TweenerActivity.this);
			pDialog.setMessage("Lade Informationen.Bitte warten...");
			pDialog.setIndeterminate(false);
			pDialog.setCancelable(true);
			pDialog.show();
		}
		protected String doInBackground(String... params) 
		{
			runOnUiThread(new Runnable() 
			{
				public void run() 
				{ 
					int success;
					try 
					{
						List<NameValuePair> params = new ArrayList<NameValuePair>();
						params.add(new BasicNameValuePair("id", id));

						JSONObject json = jsonParser.makeHttpRequest(
								url_product_details, "GET", params);
						Log.d("Single Product Details", json.toString());						
						success = json.getInt(TAG_SUCCESS);
						
						if (success == 1) 
						{

							JSONArray productObj = json.getJSONArray(TAG_PRODUCT); 						
							JSONObject product = productObj.getJSONObject(0);							

							txtNamear = (TextView) findViewById(R.id.useruni);
							txtNamear.setText(product.getString(TAG_USER));							
						}
						else
						{	
						}
					} 
					catch (JSONException e) 
					{
						e.printStackTrace();
					}
				}
			});
			return null;
		}
		protected void onPostExecute(String file_url) 
		{
			pDialog.dismiss();
		}
	}
	class LoadAllDetails extends AsyncTask<String, String, String> 
	{	
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			pDialog1 = new ProgressDialog(TweenerActivity.this);
			pDialog1.setMessage("Lade Informationen. Bitte warten...");
			pDialog1.setIndeterminate(false);
			pDialog1.setCancelable(false);
			pDialog1.show();
		}
		protected String doInBackground(String... args) {

			List<NameValuePair> params = new ArrayList<NameValuePair>();

			params.add(new BasicNameValuePair("id", id));
			JSONObject json = jParser.makeHttpRequest(url_all_user_details, "GET", params);		

			Log.d("All User details ", json.toString());
			try 
			{
				int success = json.getInt(TAG_SUCCESS);

				if (success == 1) 
				{
					products = json.getJSONArray(TAG_DETAILS);

					for (int i = 0; i < products.length(); i++)
					{
						JSONObject c = products.getJSONObject(i);

						wid	   = c.getString(TAG_WID);						
						user  = c.getString(TAG_USER);		
						info = c.getString(TAG_INFO);
						comment  = c.getString(TAG_COMMENT);					
						stat   = c.getString(TAG_STAT);

						HashMap<String, String> map = new HashMap<String, String>();

						map.put(TAG_WID, wid);
						map.put(TAG_USER, user);
						map.put(TAG_INFO, info);
						map.put(TAG_COMMENT, comment);
						map.put(TAG_STAT, stat);

						productsList.add(map);
					}
				} 
				else 
				{		
					Intent i4 = new Intent(getApplicationContext(),NewInfoActivity.class);
					i4.putExtra(TAG_ID, id);		

					startActivityForResult(in, 100);	
				}
			} 
			catch (JSONException e)
			{
				e.printStackTrace();
			}
			return null;
		}
		protected void onPostExecute(String file_url)
		{
			pDialog1.dismiss();

			runOnUiThread(new Runnable() 
			{
				public void run() 
				{			
					ListAdapter adapter = new SimpleAdapter(
							TweenerActivity.this, productsList,
							R.layout.list_item_tweener, new String[] { TAG_WID,
									 TAG_USER, TAG_INFO, TAG_COMMENT, TAG_STAT },
							new int[] {R.id.widTween, R.id.userTween, R.id.infoTween, R.id.commentTween, R.id.statTween});
				
					setListAdapter(adapter);
				}
			});
		}
	}		
}

Also ich habe in meiner DB zwei Tabellen.

eine Tabelle mit Usern und den IDs und eine mit den daten, in der ich für jeden User nochmal zusätze einfügen kann und mit WIDs unterscheiden kann.

Wenn ich alle Informationen zu allen Usern in einer anderen Activity aufrufe funktioniert es einwandfrei.


Hier mal ein Schwank aus meiner Logcat:

Code:
 D/Single User Details(7218): {"product":[{"id":"13","user":"Test"}],"success":1}
 D/dalvikvm(7218): GC_CONCURRENT freed 141K, 3% free 8834K/9095K, paused 1ms+3ms
 D/All User details(7218): {"success":1,"products":[{"info":null,"comment":null,"wid":null,"stat":null,"user":null},{"info":null,"comment":null,"wid":null,"stat":null,"user":null},{"info":null,"comment":null,"wid":null,"stat":null,"user":null}]}
 
Kann das an der php liegen?

Ich habe die Datenbank komplett in utf_8 unicode_ci und bei aufruf aller User geht das seltsamerweise.
 
Also auf der Android Seite kommt ja schon im JSON-Response alles mit null an.
Bist du wirklich sicher, dass der Response auf dem Server korrekt gefüllt wird?

Wie sieht der PHP echo output aus?

Zudem solltest du dir deinen Android Code nochmal ganz genau ansehen, ganz unabhängig von deinem eigentlichem Problem. Da ist so einiges im Argen!
Warum ließt den den Intent so oft aus? Warum die ID zwei mal? Das Abrufen der Daten, ganz ohne Referenz und weiter habe ich dann gar nicht mehr geguckt.

Gruß Harry
 
PHP:
<?php

$response = array();

require_once __DIR__ . '/db_connect.php';

$db = new DB_CONNECT();


if (isset($_GET["id"])) 
{
    $id = $_GET['id'];


$result =mysql_query('set names utf8');
$result = mysql_query("SELECT *FROM daten WHERE id = $id")or die(mysql_error());

if (mysql_num_rows($result) > 0) {

    $response["products"] = array();
    
    while ($row = mysql_fetch_array($result)) {


        $product["wid"]        = $row["wid"]; 
        $product["user"]       = $row["user"]; 
        $product["info"]        = $row["info"]; 
        $product["comment"] = $row["comment"]; 
        $product["stat"]       = $row["stat"];


        array_push($response["products"], $product);
    }

    $response["success"] = 1;


    echo json_encode($response);
} else {

    $response["success"] = 0;
    $response["message"] = "No products found";


    echo json_encode($response);
}
}
?>


So. War doch ganz einfach^^
Wie ich bereits erwähnte funktioniert die App ja ganz gut.
Sowohl das Auslesen aller, wie auch einzelner Informationen.
Einzig das auswerfen bestimmter informationen zu bestimmten Usern lief nicht.

Mit der php hab ich das ganze aber gefixt.
Das Problem lag schlicht und ergreifend in der php, in der ich statt der spalten, einzelne informationen abgerufen habe und die immer wieder überschrieben wurden im Array.


@Harry:

Ich lese die Intents so oft aus, weil ich damit verschiedene Sachen mache.
Es kommt ja keine Intent doppelt vor.
Ich lasse mir in der Activity, die ich vorliegen habe ja nicht nur die Daten Anzeigen, sondern verarbeite sie ja auch weiter.
Es hätte aber keinen Sinn ergeben einen Ellen langen Source hier zu posten, wenn ich ja weiß, welche Abschnitte mit dem Problem zusammen hängen.

Das ich die ID doppelt auslese habe ich selbst grade erst bemerkt.

Ich beschäftige mich erst seit einigen Wochen mit Android, PHP und MySQL und habe vorher keinerlei Erfahrungen im Umgang Programmiersprachen gesammelt.
Dafür sollte das schon ganz okay sein;)

Vielleicht kannst du mir sagen, wo die groben Fehler in meinem Source sind, damit ich daraus lernen kann.
Die App an sich macht das, was sie soll und läuft auch stabil.

Ich bin euch sehr dankbar für eure Unterstützung.

Gruß
Chris
 

Ähnliche Themen

M
Antworten
21
Aufrufe
1.407
swa00
swa00
Mr-Fisch
Antworten
5
Aufrufe
1.003
migi01
migi01
Mr-Fisch
Antworten
8
Aufrufe
1.030
Mr-Fisch
Mr-Fisch
M
Antworten
9
Aufrufe
833
mkuz24
M
A
Antworten
5
Aufrufe
708
swa00
swa00
Zurück
Oben Unten