Aufruf eines php-Skriptes via JAVA

  • Antworten:3
Rammi22
  • Forum-Beiträge: 3

06.10.2014, 21:43:11 via Website

Hallo,
ich habe nach dem Beispiel "MySql Datenbank in eine ListView auslesen!" aus diesem Forum eine Test-App geschrieben.

Dazu mein MainActivity.java:

package de.rammi.phpapp;

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.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {

InputStream is;
ArrayList<String> results = new ArrayList<String>();
JSONObject json_data;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getData(null);
}

private void getData(String result) {
    result = "";
    ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

    try{
        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("...");
        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();
    }
    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);
            results.add((String) json_data.get("id") + json_data.get("name"));
        } 
        fillList();
    }
    catch(JSONException e){
        Log.e("log_tag", "Error parsing data hier " + e.toString());
    }
}

private void fillList() {
    this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));        
}

}

Der abzurufende return der php-Datei:

print(json_encode(array("Hallo Android", "von meiner Testseite")));

Das erzeugt einen Fehler:

10-06 21:16:34.329: E/log_tag(29939): Error parsing data hier org.json.JSONException: Value Hallo Android at 0 of type java.lang.String cannot be converted to JSONObject

Es geht also um diese Zeilen:

try{
        JSONArray jArray = new JSONArray(result);
        for( int i = 0; i < jArray.length(); i++ ){
            json_data = jArray.getJSONObject(i);
            results.add((String) json_data.get("id") + json_data.get("name"));
        } 
        fillList();
    }
    catch(JSONException e){
        Log.e("log_tag", "Error parsing data hier " + e.toString());
    }

Ich bin absolut Neuling auf dem Gebiet JAVA, meine Erfahrung beschränken sich auf PHP, SQL etc.
Was also muss ich hier ändern um den enstprechenden Output zu bekommen?

Gruss Rammi

Antworten
Andy N.
  • Forum-Beiträge: 3.112

06.10.2014, 23:25:40 via App

Du wirst kein gültiges json Object generieren.
Was gibt es denn als Rückgabe, wenn Du die URL aufrufst.

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.958

07.10.2014, 07:04:37 via App

Rammi22

Hallo,
ich habe nach dem Beispiel "MySql Datenbank in eine ListView auslesen!" aus diesem Forum eine Test-App geschrieben.

Dazu mein MainActivity.java:

package de.rammi.phpapp;

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.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {

InputStream is;
ArrayList<String> results = new ArrayList<String>();
JSONObject json_data;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getData(null);
}

private void getData(String result) {
result = "";
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();

  try{
      HttpClient httpclient = new DefaultHttpClient();
      HttpPost httppost = new HttpPost("...");
      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();
  }
  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);
          results.add((String) json_data.get("id") + json_data.get("name"));
      } 
      fillList();
  }
  catch(JSONException e){
      Log.e("log_tag", "Error parsing data hier " + e.toString());
  }

}

private void fillList() {
this.setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, results));
}
}

Der abzurufende return der php-Datei:

print(json_encode(array("Hallo Android", "von meiner Testseite")));

Das erzeugt einen Fehler:

10-06 21:16:34.329: E/log_tag(29939): Error parsing data hier org.json.JSONException: Value Hallo Android at 0 of type java.lang.String cannot be converted to JSONObject

Es geht also um diese Zeilen:

try{
      JSONArray jArray = new JSONArray(result);
      for( int i = 0; i < jArray.length(); i++ ){
          json_data = jArray.getJSONObject(i);
          results.add((String) json_data.get("id") + json_data.get("name"));
      } 
      fillList();
  }
  catch(JSONException e){
      Log.e("log_tag", "Error parsing data hier " + e.toString());
  }

Ich bin absolut Neuling auf dem Gebiet JAVA, meine Erfahrung beschränken sich auf PHP, SQL etc.
Was also muss ich hier ändern um den enstprechenden Output zu bekommen?

Gruss Rammi

du willst den string ID und name auslesen und in deinen komischen print(json_encode(array("Hallo Android", "von meiner Testseite";) gibst keine string id und name.

http://cwpdev.blogspot.de/2014/03/android-mysql-php-json-tutorial.html?m=1

http://www.webmasterpro.de/coding/article/php-json-verwenden.html

— geändert am 07.10.2014, 07:05:51

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
Rammi22
  • Forum-Beiträge: 3

07.10.2014, 08:14:38 via Website

[[cite Ludy]]
du willst den string ID und name auslesen und in deinen komischen print(json_encode(array("Hallo Android", "von meiner Testseite";) gibst keine string id und name.

Ok, dann ist das mal geklärt, das tutorial ist fehlerhaft, die php-Array-Keys müssen benannt werden, das wird im o.g. tut nicht beschrieben

Also php abgeändert in:

<?php 
$arr = array(
    "id" => "Hallo Android", 
    "name" => "von meiner Testseite"
);
print(json_encode(array( $arr )));
?>

Jetzt gehts, Danke

Gruss Rammi

Antworten