Emulator mit Internetverbindung

  • Antworten:26
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 124

03.05.2014, 18:33:31 via Website

Also, da mir noch niemand geantwortet hat, und das Problem mit einem simplen <uses-permission android:name="android.permission.INTERNET"/> im manifest lösen konnte, gleich zum nächsten Problem......

was bedeutet eglSurfaceAttrib not implemented ?????

— geändert am 03.05.2014, 22:08:21

Antworten
  • Forum-Beiträge: 124

03.05.2014, 19:16:21 via Website

irgendetwas läuft hier schief und ich habe keine ahnung was.

Wenn ich das richtige Passwort eingebe bekomme ich auch die richtige antwort zurück geliefert, aber werde nicht weitergeleitet, ich denke hier liegt irgendwo das Problem ( da ich nicht genau verstehe was er da macht ;) Vieleicht ann mir das ja jemand erklären :)
Hier mein Login Code .java

                if(response.equalsIgnoreCase(&quot;User Found&quot;)){
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(Login.this,&quot;Login Success&quot;, Toast.LENGTH_SHORT).show();
                        }
                    });
                    final CheckBox CBsave = (CheckBox)findViewById(R.id.CBbnsave); 
                    if(CBsave.isChecked()){
                        saveBnInDb();
                    }   
                    startActivity(new Intent(Login.this, rechner.class));

                }else{
                    showAlert();                
                }

            }catch(Exception e){
                dialog.dismiss();
                System.out.println(&quot;Exception : &quot; + e.getMessage());
            }
        }

public void showAlert(){
            Login.this.runOnUiThread(new Runnable() {
                public void run() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Login.this);
                    builder.setTitle(&quot;Login Error.&quot;);
                    builder.setMessage(&quot;User not Found.&quot;)  
                           .setCancelable(false)
                           .setPositiveButton(&quot;OK&quot;, new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) {
                               }
                           });                     
                    AlertDialog alert = builder.create();
                    alert.show();               
                }
            });
        }

Eigentlich sollte alles Korrekt sein, es zeigt mir nirgends Feheler an, und auch mit meinen wenigen kenntnissen, sollte die logik der abläufe stimmen, also was verbocke ich?

— geändert am 03.05.2014, 22:10:48

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

04.05.2014, 11:41:19 via Website

Bitte mache Sachen auf der UI immer im UI Thread also zb die CB save auf dem Layout suchen und auslesen.
Ich glaube das start Activity muss innerhalb des UI Threades ausgeführt werden.
Bekommst du denn keine LogCat Fehler?

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

Antworten
  • Forum-Beiträge: 124

04.05.2014, 16:38:03 via Website

Danke! , gestern um 4 Uhr habe ich das geändert!... Irgendwie "logisch" :) .

Ich habe den fehler gefunden weshalb es mich nicht weiterleitet. er liegt irgendwo hier drin, ich bring es nicht fertig die variable response mit dem String aus der PHP datei zu vergleichen. so siehts aus:

Dazu habe ich hinter den funktionien noch fragen hingeschrieben, vieleicht könnt ihr (du) mir das beantworten ob es das ist was ich vermute :)

try{            

                httpclient=new DefaultHttpClient();
                httppost= new HttpPost(&quot;blabla.php&quot;); // Das funktioniert, ich erhalte in der Edittext die korrekte ausgabe!
                nameValuePairs = new ArrayList&lt;NameValuePair&gt;(2); 

// 1* bedeutet die 2 das nur zwei variablen akzeptiert werden gleich unten? was müsste ich für einen "ungewisse anzahl" eingeben? (0) ???

                nameValuePairs.add(new BasicNameValuePair(&quot;bn&quot;,bn.getText().toString().trim()));   
                nameValuePairs.add(new BasicNameValuePair(&quot;pw&quot;,pw.getText().toString().trim()));  
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

// Mit setEntity wird die POST eingefügt, soweit klar?!

                response=httpclient.execute(httppost); 

// execute heisst wohl ausführen.

                ResponseHandler&lt;String&gt; responseHandler = new BasicResponseHandler(); 
                final String response = httpclient.execute(httppost, responseHandler); 

2* Darf ich fragen weshalb man <String> in eckigen klammern verwendet?? Hier fängt das Problem an, ich nehme an dies ist die "Parse" fase?

                System.out.println(&quot;Response : &quot; + response); 

3* Hier wird aber "noch" nichts angezeigt bei CatLog, steht nur "Responce:" ??

                runOnUiThread(new Runnable() {
                            public void run() {
                                tv.setText(&quot;Response from PHP : &quot; + response);
                                dialog.dismiss();
                            }
                        }); 

// Nun funktioniert anscheinend die variable response auf einmal, im Edittext wird die php ausgabe "ok" angezeigt, oder bei false etwas anderes.

                    final String userTrue = &quot;ok&quot;;

4* Den String habe ich erschaffen um zu vergleichen.... vorher war es direkt im response.equalsIgnoreCase("ok";), dachte daran liegt der fehler... war nix! Die php ausgabe ist lediglich ein per echo ''; ausgebenen String, und hier haperts, ich bekomme nie ein true sondern immer false. wieso ist das?

                    if(response.equalsIgnoreCase(userTrue)){

                            }else{

}

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

04.05.2014, 16:47:23 via Website

Vergleiche halt mal die beiden Strings im Debugmodus

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

Antworten
  • Forum-Beiträge: 124

04.05.2014, 17:25:00 via Website

das habe ich nun gemacht. 1 mal ok, dann zwei mal nicht ok... ? weshalb ruft es das ganze drei mal auf? ... hier der logCat...

und was ist das "not implemented" ????

......

05-04 15:21:28.888: W/EGL_emulation(1546): eglSurfaceAttrib not implemented
05-04 15:21:29.098: W/SingleClientConnManager(1546): Invalid use of SingleClientConnManager: connection still allocated.
05-04 15:21:29.098: W/SingleClientConnManager(1546): Make sure to release the connection before allocating another one.
05-04 15:21:29.278: I/System.out(1546): Response : ok

05-04 15:21:29.278: I/System.out(1546): 

05-04 15:21:29.278: I/System.out(1546): 

05-04 15:21:29.288: I/response-info(1546): ok

05-04 15:21:29.288: I/response-info(1546): 

05-04 15:21:29.288: I/response-info(1546): 

05-04 15:21:29.288: D/response-debug(1546): ok

05-04 15:21:29.288: D/response-debug(1546): 

05-04 15:21:29.288: D/response-debug(1546): 

05-04 15:21:29.288: D/userTrue(1546): ok
05-04 15:21:29.538: W/EGL_emulation(1546): eglSurfaceAttrib not implemented

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

04.05.2014, 17:45:13 via Website

Das mit der Häufigkeit musst du wissen ich kenne deinen Code nicht.
Trotzdem müsste bei allen 3 versuchen das gleiche rauskommen
prüfe mal ob im php immer die gleichen werte ankommen

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

Antworten
  • Forum-Beiträge: 124

04.05.2014, 18:08:42 via Website

das habe ich, wenn ich das falsche passwort eingebe kommt nicht ein ok sondern der eingetragene name zurück und zeigt es mir einwandfrei im Editext an.....

langsam weiss ich weiss ich was du meinst... der fehler muss wo anders liegen, AAAABER , ich habe nun alles aus dem Code gestriechen was ich nicht gerade für das Login brauche, und es wiederholt sich "Laut Loc Cat immer gleich drei mal... wieso, habe ich keine ahnung, der Code ist eigentlich oben... :)

Ausser könnte es sein das dies das Problem ist:

 b = (Button)findViewById(R.id.loginButton);  
            bn = (EditText)findViewById(R.id.ETbn);
            pw= (EditText)findViewById(R.id.ETpw);
            tv = (TextView)findViewById(R.id.loginstatus);

            b.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog = ProgressDialog.show(Login.this, &quot;&quot;, 
                            &quot;Login wird &uuml;berpr&uuml;ft...&quot;, true);
                     new Thread(new Runnable() {
                            public void run() {  
                                login();                          
                            }
                          }).start();               
                }
            });

}        

hier wird ja das Login() aufgerufen also, den string in 4'ten Post hier..... ha das was mit runnable zu tun?

Antworten
  • Forum-Beiträge: 124

04.05.2014, 18:25:11 via Website

Mir ist noch was aufgefallen

05-04 16:22:47.878: W/EGL_emulation(2261): eglSurfaceAttrib not implemented
05-04 16:22:47.938: W/SingleClientConnManager(2261): Invalid use of SingleClientConnManager: connection still allocated.
05-04 16:22:47.938: W/SingleClientConnManager(2261): Make sure to release the connection before allocating another one.
05-04 16:22:48.028: I/System.out(2261): Response : ok

05-04 16:22:48.028: I/System.out(2261): 

05-04 16:22:48.028: I/System.out(2261): 

05-04 16:22:48.028: I/response-info(2261): ok

05-04 16:22:48.028: I/response-info(2261): 



05-04 16:22:48.028: I/response-info(2261): 

05-04 16:22:48.038: D/response-debug(2261): ok

05-04 16:22:48.038: D/response-debug(2261): 

05-04 16:22:48.038: D/response-debug(2261): 

05-04 16:22:48.038: D/userTrue(2261): ok
05-04 16:22:48.128: D/ResponseRunnable(2261): ok

05-04 16:22:48.128: D/ResponseRunnable(2261): 

05-04 16:22:48.128: D/ResponseRunnable(2261): 

05-04 16:22:48.327: D/dalvikvm(2261): GC_CONCURRENT freed 303K, 10% free 3939K/4368K, paused 5ms+33ms, total 99ms
05-04 16:22:48.427: W/EGL_emulation(2261): eglSurfaceAttrib not implemented

Den String den ich selber erstellt habe (UserTrue) wird nur einmal aufgerufen, kann es sein das in der response eine art array abläuft?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

04.05.2014, 18:25:14 via Website

Das sieht ok aus.
Wie sieht deine komplette Login Funktion aus?
wie oft dird das onclick aufgerufen?

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

Antworten
  • Forum-Beiträge: 124

04.05.2014, 18:34:23 via Website

Also ich hau mal den ganzen Code rein...... :( Das ist eigentlich nicht mein Ziel, aber langsam wirds mühsam ^^

public class Login extends Activity {

    ///vorl&auml;ufiges Login

/**final static String MY_DB_NAME = &quot;awad&quot;;
final static String MY_DB_TABLE = &quot;login&quot;;
final static String tag=&quot;ensacom&quot;;
    SQLiteDatabase myDB = null;**/


    /// Loginversuch nr 1 

    Button b;
    EditText bn,pw;
    TextView tv;
    HttpPost httppost;
    StringBuffer buffer;
    HttpResponse response;
    HttpClient httpclient;
    List&lt;NameValuePair&gt; nameValuePairs;
    ProgressDialog dialog = null;

protected void onCreate(Bundle savedInstanceState) {



        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);



//      onCreateDBAndDBTabled();
        Log.i(&quot;amschti&quot;, &quot;start&quot;);

 b = (Button)findViewById(R.id.loginButton);  
            bn = (EditText)findViewById(R.id.ETbn);
            pw= (EditText)findViewById(R.id.ETpw);
            tv = (TextView)findViewById(R.id.loginstatus);

            b.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog = ProgressDialog.show(Login.this, &quot;&quot;, 
                            &quot;Login wird &uuml;berpr&uuml;ft...&quot;, true);
                     new Thread(new Runnable() {
                            public void run() {  
                                login();                          
                            }
                          }).start();               
                }
            });

}        

void login(){
            try{            

                httpclient=new DefaultHttpClient();
                httppost= new HttpPost(&quot;ist_correkt.php&quot;); // make sure the url is correct.
                //add your data
                nameValuePairs = new ArrayList&lt;NameValuePair&gt;(2);
                // Always use the same variable name for posting i.e the android side variable name and php side variable name should be similar, 
                nameValuePairs.add(new BasicNameValuePair(&quot;bn&quot;,bn.getText().toString().trim()));  // $Edittext_value = $_POST['Edittext_value'];
                nameValuePairs.add(new BasicNameValuePair(&quot;pw&quot;,pw.getText().toString().trim())); 
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                //Execute HTTP Post Request
                response=httpclient.execute(httppost);
                // edited by James from coderzheaven.. from here....
                ResponseHandler&lt;String&gt; responseHandler = new BasicResponseHandler();
                final String response = httpclient.execute(httppost, responseHandler);
                System.out.println(&quot;Response : &quot; + response); 
                runOnUiThread(new Runnable() {
                    public void run() {
                        tv.setText(&quot;Response from PHP : &quot; + response);
                        Log.d(&quot;ResponseRunnable&quot;, response);
                        dialog.dismiss();
                    }
                });

                final String userTrue = &quot;ok&quot;;
                Log.i(&quot;response-info&quot;, response);
                Log.d(&quot;response-debug&quot;, response);
                Log.d(&quot;userTrue&quot;, userTrue);
//              String the_string_response = ConvertResponseToString(response);
                if(response.equalsIgnoreCase(userTrue)){
                    runOnUiThread(new Runnable() {
                        public void run() {
                            Toast.makeText(Login.this,&quot;Login Erfolgreich&quot;, Toast.LENGTH_SHORT).show();
                                final CheckBox CBsave = (CheckBox)findViewById(R.id.CBbnsave); 
                                    if(CBsave.isChecked()){
                                        //saveBnInDb();
                                    }   
                                    startActivity(new Intent(Login.this,rechner.class));


                        }
                    });


                }else{
                    showAlert();                
                }

            }catch(Exception e){
                dialog.dismiss();
                System.out.println(&quot;Exception : &quot; + e.getMessage());
            }
        }

public void showAlert(){
            Login.this.runOnUiThread(new Runnable() {
                public void run() {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Login.this);
                    builder.setTitle(&quot;Login Fehler.&quot;);
                    builder.setMessage(&quot;Keine &Uuml;bereinstimmung.&quot;)  
                           .setCancelable(false)
                           .setPositiveButton(&quot;OK&quot;, new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) {
                               }
                           });                     
                    AlertDialog alert = builder.create();
                    alert.show();               
                }
            });
        }

Antworten
  • Forum-Beiträge: 124

06.05.2014, 19:23:04 via Website

HOPLA!!! Geschafft, nach 2 Tagen müüsehligem zusammenschnipseln von diversen Codes, habe ich es geschafft, naja... noch nicht ganz :)

Ich habe eine frage bezüglich Json... mein Folgender Code sieht jetzt so aus: (auslesen und in einem Array speichern....)

HttpResponse response=httpclient.execute(httppost);
             HttpEntity entity = response.getEntity();
             is = entity.getContent();
             if (entity.getContentLength() &gt; 10){
                 checkpwtrue = true;
                   Log.e(&quot;entity&quot;,&quot;true&quot;);
             }
        }catch(Exception e){
            Log.e(&quot;log_tag&quot;, &quot;Error in http connection&quot;+e.toString());
        }

        //convert response to string
        try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,&quot;UTF-8&quot;),8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + &quot;\n&quot;);
            String line=&quot;0&quot;;

            while ((line = reader.readLine()) != null) {
                sb.append(line + &quot;\n&quot;);

            }

            is.close();
            result=sb.toString();
           Log.i(&quot;result&quot;,result);

        }catch(Exception e){
            Log.e(&quot;log_tag&quot;, &quot;Error in read&quot;+e.toString());
        }
        //convert response to string
       if(checkpwtrue == true){
           Log.i(&quot;result&quot;,&quot;Array wird erstellt&quot;);
         //paring data
            String fd_bn;
            String fd_pw;
            try{
             JSONArray jArray = new JSONArray(result);
            JSONObject json_data=null;

                for(int i=0;i&lt;jArray.length();i++){
                    json_data = jArray.getJSONObject(i);
                    fd_bn=json_data.getString(&quot;bn&quot;);
                    fd_pw=json_data.getString(&quot;pw&quot;);
                    Log.i(&quot;zeige bn&quot;, fd_bn);
                    Log.i(&quot;zeige pw&quot;, fd_pw);

                    }



            }catch(JSONException e1){
                Toast.makeText(getBaseContext(), &quot;No Food Found&quot;, Toast.LENGTH_LONG).show();
            }catch (ParseException e1){
                e1.printStackTrace();
            }
         }

Nun das Problem. wenn die bn,pw abrage keinen erfolg hat, kommen keine json variablen im App an, was zu einem Problem führt, wenn es den jsonArray ausführt, der emulator bricht dan einfach ab und hat mich raus. nun habe ich mir gedacht ich mache direkt bei den entity eine kontrolle ob was angekommen ist, irgendwie funktioniert das aber auch nicht richtig, erst wenn ich wie hier z.b. grösser als 10 angebe. klappt das was ich will. ein boealen wird auf true gesetzt. und später mache ich dann die if anweisung ob "checkpwtrue" auf true ist....

Irgendwie ist das selbst für mich zu fest gebastelt? hast du? oder Ihr einen Tipp für mich? wie ich das anders lösen kann?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

06.05.2014, 19:31:45 via Website

ist es nicht einfacher so zu prüfen (am besten den result String überprüfen anstatt entity):

if(!result.istEmpty() &amp; result !=null)

{

//Do your things
}

In der entity länge kann auch noch etwas anderes drinne stehen als im string result deswegen besser den String überprüfen.
PS: Variablenname "checkpwtrue" ist irgendwie nicht sinnvoll gewählt, sollte lieber isJson oder isResult heißen.

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

Antworten
  • Forum-Beiträge: 124

06.05.2014, 19:42:49 via Website

ok, ich versuchs gleich "nochmal"... obwohl ich ziemlich sicher bin, das es eben nicht funktioniert hat ;)..... hatte aber genau diese Idee zu anfang!!!

— geändert am 06.05.2014, 19:46:44

Antworten
  • Forum-Beiträge: 124

06.05.2014, 19:46:27 via Website

Also.. tatsächlich, das klappt nicht! also hier:

if(result != null &amp;&amp; !result.isEmpty())

Ich vermute es liegt daran das "irgendwas" von StringBuilder übergeben wird..... :(

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

06.05.2014, 19:55:13 via Website

Also tut es jetzt so oder nicht?

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

Antworten
  • Forum-Beiträge: 124

06.05.2014, 19:58:18 via Website

leider nicht... wenn ich das falsche passwort/benutzername eingebe kommt von der php seite NIX !
und trotzdem will es mit deinem "if" vorschlag nicht klappen!!! :(

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.165

06.05.2014, 20:02:35 via Website

Komisch gehe mal in den Debugmodus und schaue die entsprechende Variable an.

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

Antworten
  • Forum-Beiträge: 124

06.05.2014, 20:12:56 via Website

ich dreh durch!!! :) wenn ich die variable result mit dem loccat = Log.d() verwende und das falsche passwort eingebe zeigt es mir dies gar nicht an, weil ich annehme das da eben nichts drin ist :) und trotzdem wird die if anweisung "ignoriert" :(. hier der loccat auszug mit falschem pw.

05-06 18:09:45.592: W/EGL_emulation(1664): eglSurfaceAttrib not implemented
05-06 18:09:45.842: I/result(1664): Array wird erstellt
05-06 18:09:45.842: W/dalvikvm(1664): threadid=16: thread exiting with uncaught exception (group=0x40a71930)
05-06 18:09:45.882: E/AndroidRuntime(1664): FATAL EXCEPTION: Thread-131
05-06 18:09:45.882: E/AndroidRuntime(1664): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
05-06 18:09:45.882: E/AndroidRuntime(1664):     at android.os.Handler.&lt;init&gt;(Handler.java:197)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at android.os.Handler.&lt;init&gt;(Handler.java:111)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at android.widget.Toast$TN.&lt;init&gt;(Toast.java:324)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at android.widget.Toast.&lt;init&gt;(Toast.java:91)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at android.widget.Toast.makeText(Toast.java:238)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at com.awad.awad_glasrechner.Login.login(Login.java:173)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at com.awad.awad_glasrechner.Login$1$1.run(Login.java:94)
05-06 18:09:45.882: E/AndroidRuntime(1664):     at java.lang.Thread.run(Thread.java:856)

Antworten

Empfohlene Artikel