In onQueryTextSubmit, Rückgabewerten einer Methode in eine Variable speichern

Hallo, ich habe gerade ein Problem in einer Activity in der Methode onQueryTextSubmit von einer Methode aus einer anderen Klasse einen Rückgabewert in eine Variable zu speichern und mit Log auszugeben, da eine Fehlermeldung kommt und die App stürzst ab. Deswegen würde ich mich über jeden Tipp freuen.

Fehlermeldung:


InputEventSender    
Exception dispatching finished signal.
MessageQueue-JNI  
Exception in MessageQueue callback: handleReceiveCallback
MessageQueue-JNI
java.lang.NullPointerException
MessageQueue-JNI
....MainActivity.onQueryTextSubmit(MainActivity.java:124)
........
........

Methode:

@Override
  public boolean onQueryTextSubmit(final String query)
  {

    String isbn = "isbn";

    CallClient callClient = new CallClient("http://ip/serverName/webServlet");

    String splaten[] = { isbn };
    String zellen[] = { query };
    Table t = new Table(splaten);

    t.addRowValues(zellen);
    Table antwort = callClient.doCall("Test", t);
    Log.d("Antwort", antwort.getColumnName(1));
   
    return true;
  }

Es ist so ohne die letzten Zeilen funktioniert alles wunderbar doCall Methode, nur bei diese letzten Zeilen:
Table antwort = callClient.doCall(„Test“, t);
Log.d(„Antwort“, antwort.getColumnName(1));

hackt es:confused:

doCall Methode

 public Table doCall(String handlerName, final Table parameter)
  {
    final CSVConverter csvConverter = new CSVConverter();
    final String parameterString = csvConverter.tableToString(parameter);
    new Thread(new Runnable()
    {
      public void run()
      {
        try
        {

          URLConnection connection = url.openConnection();
          connection.setDoOutput(true);
          OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream());
          out.write(parameterString);
          out.close();

          BufferedReader in = new BufferedReader(new InputStreamReader(connection
              .getInputStream()));

          String returnString = "";

          while ((returnString = in.readLine()) != null)
          {
            daten = returnString;

          }
          in.close();
          Log.d("Buchdaten", daten);
          antwort = csvConverter.stringToTable(daten);
          Log.d("Spaltenname Nr.2 ", antwort.getColumnName(1));

        }
        catch (Exception e)
        {
          Log.d("Exception", e.toString());
        }

      }
    }).start();
    return antwort;
  }

hier am ende der Methode wird Log ganz normal ausgegeben also kann das nicht an der Methode liegen :confused:

Gruß

Hi,

laut Log hast du eine Nullpointer Exception. Bitte prüfe, ob die beteiligten Variablen eventuell null sind.

Gruß,

Martin

Ja der Rückgabewert ist tatsächlich null aber ich verstehe nicht ganz wieso, in der doCall Methode fast ganz am Ende ist die noch nicht null da Log Ausgabe ohne Probleme statfindet. Kann es sein, dass es mit dem Thread zusammenhängt und ich diesen erstmal beenden sollte?

Gruß

Ich kenne die exakte implementierung nicht.

Aber hier scheint ja antwort null zu sein zu einem bestimmten Zeitpunkt. Wenn das asynchron passiert, musst du die antwort über einen callback bearbeiten und nicht in der gleichen methode.

okay, danke für die Antwort!