Android String/ get.text error :(

  • Antworten:26
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 17:18:35 via Website

Hallo liebe Community, ich arbeite gerade an einer App die an einer mysql Datenbank angeschlossen ist.

Nun habe ich bei meinem Javer Script einen Fehler gefunden und weiß nicht woher der kommt :( könnt ihr mir helfen ?

Code:

EditText inputName;
EditText inputPrice;
EditText inputDesc;





    inputName = (EditText) findViewById(R.id.inputName);
    inputPrice = (EditText) findViewById(R.id.inputPrice);
    inputDesc = (EditText) findViewById(R.id.inputDesc);



        String name = inputName.getText().toString();                 ----> Hier Error
        String price = inputPrice.getText().toString();                    ----> Hier Error
        String description = inputDesc.getText().toString();         ----> Hier Error

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 17:25:23 via App

Hallo Phillip,
die Aussge Error sagt wenig aus, was ist das denn für ein Error und wo steht der get Befehl drinne? In der onCreate?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 17:27:53 via Website

image

Mehr steht da nicht :/

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 17:30:59 via App

Sagt doch schon alles aus. Du arbeitest mit Threads und willst due UI aus dem Thread Updaten, das geht nicht. Du muss das alles in dem UI Thread machen. z.b mit Activity#runOnUiThread oder einem Handler

LG Pascal //It's not a bug, it's a feature. :) ;)

Ludy

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 17:35:54 via Website

Ich habe keine Ahnung von UI Threads wie mach ich das jetzt mit meinen Strings ?

Lg Philipp // Never touch a bugging system :)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 17:45:11 via Website

Kannst du mir nen Hilfe Link schicken oder mir erklären was ich jetzt ändern muss ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 17:45:59 via App

Dazu musst du mir erstmal mehr Code zeigen. und das"keine Ahnung" lässt sich beheben durch recherche im inet. 😉

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 17:51:27 via Website

  1. Ich habe den Code nicht selber geschrieben sondern teste gerade was alles mit android und mysql so machbar ist (lernen und so).

  2. Ich schicke gleich den Code (Kannst du auch auf http://www.androidhive.info/2012/05/how-to-connect-android-with-php-mysql/ dir angucken).

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 18:04:30 via App

Ganz richtig ist der Code nicht. Du musst die String abfrage aus dem doIn Background rausnehmen un in davor im UI Thread machen. Die Strings kannst du dann als Parameter übergeben.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 18:23:00 via Website

doln Background ? Wo ist das ?

Lg Philipp // Never touch a bugging system :)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 18:30:39 via Website

Habe ich denn im Code schon einen UI Thread ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 18:36:48 via Website

  1. Wenn du noch eine Anmerkung hast, bearbeite bitte deinen letzten post und Poste nicht immer neu
  2. Wie willst du richtig programmieren wenn du keine ahnung hast. Du bist doch jetzt schon eine Längere Zeit dabei..

  3. Wenn du nicht nur Copy&Paste machen würdest, dann hättest du den Fehler schon längst behoben.

  4. Der fehler Liegt hier:

    • */
      protected String doInBackground(String... args) {
      String name = inputName.getText().toString();
      String price = inputPrice.getText().toString();
      String description = inputDesc.getText().toString();

      // Building Parameters
      List<NameValuePair> params = new ArrayList<NameValuePair>();
      params.add(new BasicNameValuePair("name", name));
      params.add(new BasicNameValuePair("price", price));
      params.add(new BasicNameValuePair("description", description));
      

Du darfst da die Strings nicht lesen, das musst du vorher machen und dann als Parameter args[] übergeben

PS: Der Thread wo der Code normalerweise ausgeführt ist der UI Thread

— geändert am 08.08.2015, 18:37:30

LG Pascal //It's not a bug, it's a feature. :) ;)

Philipp Hörig

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 19:05:35 via Website

Also soll ich jetzt die Building Parameters vor den protected String doInBackground(String... args) { Code machen ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 19:13:27 via Website

Mit voher machen meine ich nicht den Code einfach hochzuscheiben sondern in der Programmlogik nach vorne schieben.

so ungefähr:

@Override
public void onClick(View view) {
// creating new product in background thread
String name = inputName.getText().toString();
String price = inputPrice.getText().toString();
String description = inputDesc.getText().toString();
new CreateNewProduct().execute(name,price,description);
}

Und dan in der DoinBackground:

protected String doInBackground(String... args) {
//...

String name = args[0];
String price = args[1];
String description = args[2];
//..
}

LG Pascal //It's not a bug, it's a feature. :) ;)

Philipp Hörig

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 19:25:27 via Website

Vielen Dank Pascal, das Funktioniert nur damit ich es noch einmal verstehe und es nicht nur Copy&Paste ist was bedeutet ( bewirkt ) die Funktion args[0] ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 19:41:17 via Website

Die Variable args ist ein String-Array mit mehreren Werten.
Um zu wissen wo der wert "sitzt" gibt es einen Index über welchen du dann den einzelnen String- Wert aus dem Array herausholen kann.
In den Eckigen Klammern gibst dann den Index an, von welchem du den String haben willst.
Folglich bedeutet args[0] -> gib mir den String an Position 0 des Arrays zurück

— geändert am 08.08.2015, 19:45:34

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 20:05:58 via Website

Ok vielen Dank bloß habe ich jetzt noch ein Problem beim debugen gehabt (die App stürzt ab) :(

Logcat [red-lines]:

08-08 20:03:34.614  26016-26410/? E/JSON Parser﹕ Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
    --------- beginning of crash
08-08 20:03:34.622  26016-26410/? E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: de.test.test.test, PID: 26016
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:304)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.toString()' on a null object reference
            at de.test.test.test.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:105)
            at de.test.test.test.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:70)
            at android.os.AsyncTask$2.call(AsyncTask.java:292)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
08-08 20:03:34.899  26016-26303/? D/OpenGLRenderer﹕ endAllStagingAnimators on 0xb49b7600 (RippleDrawable) with handle 0xaec2cf80
08-08 20:03:34.941  26016-26016/? E/WindowManager﹕ android.view.WindowLeaked: Activity de.test.test.test.NewProductActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{2399da64 V.E..... R......D 0,0-1026,348} that was originally added here
            at android.view.ViewRootImpl.<init>(ViewRootImpl.java:363)
            at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
            at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
            at android.app.Dialog.show(Dialog.java:298)
            at de.test.test.test.NewProductActivity$CreateNewProduct.onPreExecute(NewProductActivity.java:82)
            at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:591)
            at android.os.AsyncTask.execute(AsyncTask.java:539)
            at de.test.test.test.NewProductActivity.onCreate(NewProductActivity.java:51)
            at android.app.Activity.performCreate(Activity.java:5990)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

Wieso passiert das ? Es gab doch keine weiteren Fehler ? :/

— geändert am 08.08.2015, 20:06:39

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 20:11:09 via Website

Kannst du nicht einfach selber nachschauen:
Fehler: org.json.JSONObject.toString()' on a null object reference
at de.test.test.test.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:105)
at de.test.test.test.NewProductActivity$CreateNewProduct.doInBackground(NewProductActivity.java:70)
Dann musst du in der NewProductActivity.java in Zeile 105 schauen

und da (mit davor ) steht:

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

        // check log cat fro response
        Log.d("Create Response", json.toString()); //Hier ist der FEhler

Da stimmt was mti dem HTTP Reqest nicht und deswegen ist dein JSONObject null und somit kannst du nix damit machen.
Dauch blöd ein Tut zu nehmen was fehlerhaft ist..

Nimm am besten ein aktuelles, die HTTP Methoden sind verbessert worden und dann musst du den Request anders machen, genau so wie du beim PHP lieber PDO nimmst anstatt die mysql geschichte

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 20:30:57 via Website

Stimmt der Code nicht oder das was im Code in dem Parameter steht ?

(Mit Parameter meine ich diese Zeile: private static String url_create_product = "http://192.168.2.127/android_connect/create_product.php";)`

Oder liegt das am php script ?

— geändert am 08.08.2015, 21:24:45

Lg Philipp // Never touch a bugging system :)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 21:48:43 via Website

Und kann man jetzt noch die Http Methode benutzen oder wurde die erneuert ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 21:57:39 via Website

Bitte nicht Pushen!

Du kannst die Methoden schon noch benutzen, es ist aber nicht empfehlenswert. Funktionieren tut es aber [die frage ist wie lange mit der neusten Android version]

Zudem habe ich die Stelle Code aus dem Tutorial entnommen und da stend das so. Wenn du die Entsprechende stelle nicht geändert hast, dann ist das schon der Fehler.

Debugge den Code einfach mal und setze da einen Breakpoint hin.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 22:01:46 via Website

Sorry Pascal, ich stehe heute auf dem Schlauch :/ was für ein Code soll ich ändern damit es geht b.z.W welchen hast du mir geschickt ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 22:06:42 via Website

Eigentlich sollst du den Fehler selber suchen. Wenn du es nicht blickst dann les dich ein mit nem Buch, Videos oder nem Java Kurs in der VHS ö.ä. aber vorschreiben wie dein Code sein muss tu ich aus Prinzip nicht, helfen gerne, dann lernt man es und kann es bein nächsten mal selber.

Das hier beschreibt den allgemeinen NPE Fehler: http://openbook.rheinwerk-verlag.de/javainsel9/javainsel_03_005.htm
und dein Json Objekt das du von JSONObject json = jParser.makeHttpRequest(url_all_products, "GET", params);
zurückbekommst ist nun null.
Somit liegt nahe dass der Fehler den du suchst irgendwo in der methode jParser.makeHttpRequest drinne steckt. Wo genau musst du selber finden

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Philipp Hörig
  • Forum-Beiträge: 106

08.08.2015, 22:25:25 via Website

Ok Pascal, ich habe den Fehler gefunden hier:

List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("name", name));
            params.add(new BasicNameValuePair("price", price));
            params.add(new BasicNameValuePair("description", description));

NameValuePair und BasicNameValuePair sind veraltet :/ was kann ich jetzt machen ? Gibt es ein neuen Code der die beiden ersetzt ?

Lg Philipp // Never touch a bugging system :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 22:31:58 via Website

Das ist genau das gleiche Phenomän wie bei den HTTP Methoden auch. Veraltet ja tuen aber trotzem.
Dir muss bewusst sein, dass es auch Code Fehler geben ann die Android Studio nicht Farbig marktiert etc. da muss du dann debuggen um den Fehler zu finden.
Ich würde die NameValuePairs erstmal so lassen, denn wen du da die Alternative nimmst musst du deinen halben web get umschreiben.



Ich sehe gerade dass der JSONParser unter umständen den fehler genieriert.
Ist denn der JSON String auch gülstig den du vom Skript zurückbekommst?
Prüfe das mal indem du bei google nach JSON validator suchst.

— geändert am 08.08.2015, 22:34:48

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

08.08.2015, 23:20:26 via App

nein getText returned ein
Editable Objekt

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten