Problem beim auslesen einer Datenbank mithilfe einer PHP datei JSONArray

  • 4 Antworten
  • Letztes Antwortdatum
S

Saleh

Neues Mitglied
0
Guten Tag,

bin kurz davor meiner ersten Erfolge in Sachen Android Programmierung zu machen. Leider bekomme ich beim ausführen meiner App den Fehler

Error parsing data org.json.JSONException: Value <?php of type java.lang.String cannot be converted to JSONArray


mein code sieht wie folgt aus :

Code:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        getData();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    InputStream is;
    JSONObject json_data;
    TableLayout table;
    TextView columnOneText;
    TextView columnTwoText;
    String columnOneString;
    String columnTwoString;

    
    
    
    
    
    public void getData() {
    String result = "";
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
    try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("[COLOR=Orange]http://hierstehtdannmeinservernamedrin/files/public-docs/PhP/test.php"[/COLOR]);
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();
    }catch(Exception e){
    Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
    }

    try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
    sb.append(line + "\n");
    }
    is.close();
    
    
    result= sb.toString();
    result.replace("<?php", "");
    
    }catch(Exception e){
    Log.e("log_tag", "Error converting result "+e.toString());
    }
    
    try {
        
        JSONArray jArray = new JSONArray(result);
        
    for(int i=0;i<jArray.length();i++){
    json_data = jArray.getJSONObject(i);
    columnOneString = json_data.get("Name").toString();
    columnTwoString = json_data.get("Text").toString();
    fillList();
    }
    }catch(JSONException e){
    Log.e("log_tag", "Error parsing data "+e.toString());
    }
    }
    
    public void fillList() {
    
    table = (TableLayout) findViewById(R.id.TableLayout01);
    TableRow row = new TableRow(this);
    columnOneText = new TextView(this);
    columnTwoText = new TextView(this);
    columnOneText.setText(columnOneString);
    columnTwoText.setText(columnTwoString);
    row.addView(columnOneText);
 row.addView(columnTwoText);

 table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }
}
Der code in meiner test.php datei :

PHP:
<?php
    mysql_connect("meinservername","Admin","testtest1");
 mysql_select_db("dbBeContinued");

    $q=mysql_query("SELECT Name, Text FROM Stories");
    while($e=mysql_fetch_assoc($q))
    $output[]=$e;
    
    print(json_encode($output));

    mysql_close();
?>
aus Sicherheitsgründen habe ich die servernamen mit einem beispiel ersetzt.

Ich habe schon alles probiert was im internet drin stand leider ohne erfolge kann mir einer weiter helfen ?

Vielen Dank im Voraus!

Der ursprüngliche Beitrag von 16:17 Uhr wurde um 16:54 Uhr ergänzt:

Saleh schrieb:
Guten Tag,

bin kurz davor meiner ersten Erfolge in Sachen Android Programmierung zu machen. Leider bekomme ich beim ausführen meiner App den Fehler

Error parsing data org.json.JSONException: Value <?php of type java.lang.String cannot be converted to JSONArray


mein code sieht wie folgt aus :

Code:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Bundle;
import android.app.ActionBar.LayoutParams;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout);
        getData();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
    InputStream is;
    JSONObject json_data;
    TableLayout table;
    TextView columnOneText;
    TextView columnTwoText;
    String columnOneString;
    String columnTwoString;

    
    
    
    
    
    public void getData() {
    String result = "";
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    
    try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("[COLOR=Orange]http://hierstehtdannmeinservernamedrin/files/public-docs/PhP/test.php"[/COLOR]);
    httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity entity = response.getEntity();
    is = entity.getContent();
    }catch(Exception e){
    Log.e("log_tag", "Fehler bei der http Verbindung "+e.toString());
    }

    try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
    sb.append(line + "\n");
    }
    is.close();
    
    
    result= sb.toString();
    result.replace("<?php", "");
    
    }catch(Exception e){
    Log.e("log_tag", "Error converting result "+e.toString());
    }
    
    try {
        
        JSONArray jArray = new JSONArray(result);
        
    for(int i=0;i<jArray.length();i++){
    json_data = jArray.getJSONObject(i);
    columnOneString = json_data.get("Name").toString();
    columnTwoString = json_data.get("Text").toString();
    fillList();
    }
    }catch(JSONException e){
    Log.e("log_tag", "Error parsing data "+e.toString());
    }
    }
    
    public void fillList() {
    
    table = (TableLayout) findViewById(R.id.TableLayout01);
    TableRow row = new TableRow(this);
    columnOneText = new TextView(this);
    columnTwoText = new TextView(this);
    columnOneText.setText(columnOneString);
    columnTwoText.setText(columnTwoString);
    row.addView(columnOneText);
 row.addView(columnTwoText);

 table.addView(row,new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    }
}
Der code in meiner test.php datei :

PHP:
<?php
    mysql_connect("meinservername","Admin","testtest1");
 mysql_select_db("dbBeContinued");

    $q=mysql_query("SELECT Name, Text FROM Stories");
    while($e=mysql_fetch_assoc($q))
    $output[]=$e;
    
    print(json_encode($output));

    mysql_close();
?>
aus Sicherheitsgründen habe ich die servernamen mit einem beispiel ersetzt.

Ich habe schon alles probiert was im internet drin stand leider ohne erfolge kann mir einer weiter helfen ?

Vielen Dank im Voraus!

Was ich noch vergessen habe mein dem Code result = sb.toString();
speichert genau das in den String "result" rein was auch in der .php Datei drin steht also den coder der php-Datei. Das sollte doch aber so nicht sein oder? Stimmt vlt was mit meinem Server nicht weil wenn ich die den URL der Datei im Browser ausführe speichert er nur die datei lokal ab und gibt nicht den JSON String zurück?!?!?
 
Saleh schrieb:
Stimmt vlt was mit meinem Server nicht weil wenn ich die den URL der Datei im Browser ausführe speichert er nur die datei lokal ab und gibt nicht den JSON String zurück?!?!?

Genau das ist es.
Setz mal den Header auf application/json


Code:
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
Gefunden in PHP Headers To Serve JSON | DZone
 
Kardroid schrieb:
Genau das ist es.
Setz mal den Header auf application/json


Code:
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');
Gefunden in PHP Headers To Serve JSON | DZone

Muss leider nochmal nachhaken bin leider noch relativ neu in der app Programmierung kannst du mir sagen wo genau diese Änderungen gemacht werden muss hattest du auch dasselbe Problem ich mein json ist an sich relativ Simple aber das ganze drum herum lässt das ganze kompliziert wirken.danke Schonmal für die Schell Antwort
 
die Header musst du im PHP File setzen, bevor irgend etwas ausgegeben wird. Am besten gleich am Anfang:

Code:
<?php
    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Content-type: application/json');

    mysql_connect("meinservername","Admin","testtest1");
    mysql_select_db("dbBeContinued");

    $q=mysql_query("SELECT Name, Text FROM Stories");
    while($e=mysql_fetch_assoc($q))
    $output[]=$e;
    
    print(json_encode($output));

    mysql_close();
?>
 
Kann dein Server über haupt php?

Mir scheint eher, dass er einfach die PHP datei so wie sie ist ausgibt wenn man sie aufruft. Das darf eigentlich nicht sein.
das Sieht man ja schon daran, dass der String mit "<?php" anfängt.
Du hast also ein Server Problem und dein PHP wird gar nicht ausgeführt.
 
Zurück
Oben Unten