Über Asynctask, PHP und Json Daten in Mysql eintragen - Verzweifelt

  • 2 Antworten
  • Letztes Antwortdatum
J

Jason235

Neues Mitglied
0
Hallo ihr,
Ich bin so langsam am verzweifeln. Seit drei Tagen nun bin ich dabei eine simple Tabelle mit 7 Spalten von Android aus zu befüllen.

Die App soll 7 Parameter an ein Php script übergeben welches diese dann in die mysql datenbank einträgt.

JSONParser.java sieht aktuell so aus:
Code:
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;

public class JSONParser {

    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    // constructor
    public JSONParser() {

    }

    // function get json from url
    // by making HTTP POST or GET mehtod
    public JSONObject makeHttpRequest(String url, String method,
                                      List<NameValuePair> params) {

        // Making HTTP request
        try {

            // check for request method
            if (method == "POST") {
                // request method is POST
                // defaultHttpClient
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpPost httpPost = new HttpPost(url);
                httpPost.setEntity(new UrlEncodedFormEntity(params));

                HttpResponse httpResponse = httpClient.execute(httpPost);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();

            } else if (method == "GET") {
                // request method is GET
                DefaultHttpClient httpClient = new DefaultHttpClient();
                String paramString = URLEncodedUtils.format(params, "utf-8");
                url += "?" + paramString;
                HttpGet httpGet = new HttpGet(url);

                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                is = httpEntity.getContent();
            }

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        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();
            json = sb.toString();
        } catch (Exception e) {
            Log.e("Buffer Error", "Error converting result " + e.toString());
        }

        // try parse the string to a JSON object
        try {
            jObj = new JSONObject(json);
        } catch (JSONException e) {
            Log.e("JSON Parser", "Error parsing data " + e.toString());
        }

        // return JSON String
        return jObj;

    }
}

den asynctask rufe ich mit:
Code:
new phpaufruf().execute();
nach einem buttonclick auf.

Der Asynchronous task startet:

Code:
  private class phpaufruf extends AsyncTask<String, String, String> {

        @Override
        protected String doInBackground(String... args) {

        //... aus gründen der übersicht ausgelassen parameter werden in   params gepackt

JSONObject json = jsonParser.makeHttpRequest(sqlurl, "POST", params);

            //check log cat for response

            Log.d("Create Response", json.toString());

            //check for sucess tag

            try {
                int success = json.getInt(TAG_SUCCESS);

                if (success == 1) {
                    //sucessfully created product
                    Intent i = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(i);
                }

            } catch (JSONException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

So langsam weiß ich leider nicht mehr weiter was genau dabei schief läuft.
Die parameter werden richtig übergeben aber sobald JSONObject json = jsonParser.makeHTTPRequest(sqlurl, "POST", params); aufgerufen wird ist json danach leer und es hagelt eine null pointer exception.

Um jede Hilfe bin ich froh.
Danke für eure Hilfe.
Gruß Demian
 
Dein InputStream ist null, weil weder

Code:
if (method == "POST")

noch

Code:
else if (method == "GET")

erfüllt sein wird. Strings vergleicht man nicht mit ==. Die Lösung zum Problem darfst du hier (Link) selber nachlesen :tongue:
 
Hey,
Danke schon mal für deine Antwort :)
Ist mir tatsächlich entgangen. Aber auch nur da es auch mit den == ging (ist beim debugging reingegangen). Habe es aber dennoch umgeändert.
Leider ändert es aber nichts an dem Problem. Ich scheine bei dem httpost etwas leeres zu übergeben und bekomme eine leere httpresponse.
Und ich hab keine Ahnung warum :-(
 
Zurück
Oben Unten