2012-04-05 7 views
0

Ich schreibe eine Anwendung, die Google Map direkt nach dem Login-Bildschirm anzeigt. Der Build-Ziel wird auf 2,3 und meine Geräte laufen:Meine Android-Anwendung wird nicht auf 2 Geräten laufen, sondern funktioniert auf Emulator

1) Samsung Galaxy Ace (2.3.4) 2) Motorolla Xoom (3,1)

ich auf dem Android-Emulator meine app versuchen und es läuft fein. Login und Kartenanzeige.

Wenn ich beide Geräte über USB an meinem Computer angeschlossen und ausgewählt habe, um die Anwendung auszuführen (Hinweis: Es gab ein orangefarbenes Warnsymbol neben dem Build-Ziel bei der Auswahl), der Anmeldebildschirm erscheint einwandfrei und wenn ich klicke " Anmelden "Die Anwendung stürzt auf Motorolla ab und friert und für eine Weile und dann tut nichts auf meinem Galaxy Ace.

Beachten Sie, dass sie beide mit dem Internet verbinden können.

Logcat für die Geräte, während die App über den USB-Anschluss ausgeführt wird:

1) Samsung Galaxy Ace

04-06 00:24:21.599: I/InputReader(162): dispatchTouch::touch event's action is 0 
04-06 00:24:21.599: I/InputDispatcher(162): Delivering touch to current input target: action: 0, channel '40796920 com.cylbs.android/com.cylbs.android.MainActivity (server)' 
04-06 00:24:21.699: I/InputReader(162): dispatchTouch::touch event's action is 1 
04-06 00:24:21.699: I/InputDispatcher(162): Delivering touch to current input target: action: 1, channel '40796920 com.cylbs.android/com.cylbs.android.MainActivity (server)' 
04-06 00:24:27.709: W/PowerManagerService(162): Timer 0x3->0x3|0x1 
04-06 00:24:28.559: D/BatteryService(162): update start 
04-06 00:24:28.569: D/BatteryService(162): update start 
04-06 00:24:28.579: D/BatteryService(162): update start 

2) Motorolla Xoom

04-06 00:27:13.490: D/AndroidRuntime(3163): Shutting down VM 
04-06 00:27:13.490: W/dalvikvm(3163): threadid=1: thread exiting with uncaught exception (group=0x40154760) 
04-06 00:27:13.510: E/AndroidRuntime(3163): FATAL EXCEPTION: main 
04-06 00:27:13.510: E/AndroidRuntime(3163): android.os.NetworkOnMainThreadException 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1077) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at dalvik.system.BlockGuard$WrappedNetworkSystem.connect(BlockGuard.java:368) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:208) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.net.PlainSocketImpl.connect(PlainSocketImpl.java:431) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at java.net.Socket.connect(Socket.java:901) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:75) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection.<init>(HttpConnection.java:48) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection$Address.connect(HttpConnection.java:304) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionPool.get(HttpConnectionPool.java:89) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getHttpConnection(HttpURLConnectionImpl.java:292) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.makeConnection(HttpURLConnectionImpl.java:274) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:217) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:624) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at com.cylbs.android.MainActivity.tryLogin(MainActivity.java:65) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at com.cylbs.android.MainActivity$1.onClick(MainActivity.java:41) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.view.View.performClick(View.java:3110) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.view.View$PerformClick.run(View.java:11928) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.os.Handler.handleCallback(Handler.java:587) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.os.Looper.loop(Looper.java:132) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at android.app.ActivityThread.main(ActivityThread.java:4025) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at java.lang.reflect.Method.invoke(Method.java:491) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
04-06 00:27:13.510: E/AndroidRuntime(3163):  at dalvik.system.NativeStart.main(Native Method) 

Dies ist mein Code für die MainActivity Dies ist nur Login und die Home-Aktivität, wo die Karte angezeigt wird:

MainActivity:

package com.cylbs.android; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    private Button login; 
    private EditText username, password; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     login = (Button) findViewById(R.id.logIn); 
     username = (EditText) findViewById(R.id.username); 
     password = (EditText) findViewById(R.id.password); 


     login.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       String mUsername = username.getText().toString(); 
       String mPassword = password.getText().toString(); 

       tryLogin(mUsername, mPassword); 

      } 
     }); 
    } 

    public boolean tryLogin(String mUsername, String mPassword) 
    {   
     HttpURLConnection connection; 
     OutputStreamWriter request = null; 

      URL url = null; 
      String response = null;   
      String parameters = "username="+mUsername+"&password="+mPassword; 
      final TextView result = (TextView) findViewById(R.id.result); 

      try 
      { 
       url = new URL("http://10.0.2.2/database_test/index.php"); 
       connection = (HttpURLConnection) url.openConnection(); 
       connection.setDoOutput(true); 
       connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
       connection.setRequestMethod("POST");  

       request = new OutputStreamWriter(connection.getOutputStream()); 
       request.write(parameters); 
       request.flush(); 
       request.close();    
       String line = "";    
       InputStreamReader isr = new InputStreamReader(connection.getInputStream()); 
       BufferedReader reader = new BufferedReader(isr); 
       StringBuilder sb = new StringBuilder(); 
       while ((line = reader.readLine()) != null) 
       { 
        sb.append(line); 
       } 
       // Response from server after login process will be stored in response variable.     
       response = sb.toString(); 
       // You can perform UI operations here 
       Toast.makeText(this,"."+ response +".", 0).show();   


       if (response.equals("Success")) 
       { 
        Session obj = new Session(); 
        obj.setUsername(mUsername); 

        Intent myIntent = new Intent(MainActivity.this, Home.class); 
        startActivity(myIntent); 
        result.setText("Login successful"); 
       } 
       else 
       { 
        result.setText("Login fail. Please try again"); 
       } 
       isr.close(); 
       reader.close(); 
      } 
      catch(IOException e) 
      { 
       // Error 
      } 
      return true; 
    } 

} 

Und die Home-Aktivität (erweitert MapActivity)

package com.cylbs.android; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.MapActivity; 
import com.google.android.maps.MapController; 
import com.google.android.maps.MapView; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 

public class Home extends MapActivity { 

    MapController mControl; 
    GeoPoint geoP; 
    MapView mapV; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.home); 

     mapV = (MapView) findViewById(R.id.mapView); 
     mapV.displayZoomControls(true); 
     mapV.setBuiltInZoomControls(true); 

     double lat = 40.8; 
     double longi = -96.666; 

     geoP = new GeoPoint((int) (lat *1E6), (int) (longi *1E6)); 

     mControl = mapV.getController(); 
     mControl.animateTo(geoP); 
     mControl.setZoom(13); 


     Button emergencies = (Button) findViewById(R.id.emergencyButton); 
     emergencies.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent myIntent = new Intent(Home.this, EmergencyList.class); 
       Home.this.startActivity(myIntent); 
      } 
     }); 
     Button disruptions = (Button) findViewById(R.id.disruptionButton); 
     disruptions.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       Intent myIntent2 = new Intent(Home.this, DisruptionList.class); 
       startActivity(myIntent2); 
      } 
     }); 
    } 

    @Override 
    protected boolean isRouteDisplayed() { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 

Irgendwelche Ideen? Gedanken? Es ist alles für jetzt. Vielen Dank.

P.S. Ich bin ein neuer Android-Entwickler.

+0

Was bedeutet das orange Warnzeichen? Was war der Fehler in Logcat beim Absturz? Was meinst du damit "tut nichts" auf dem Ass? Nicht sicher, was du genau meinst. Funktioniert es auf anderen tatsächlichen Geräten? –

+0

Es gibt ein gelbes Warnsymbol neben mehreren Telefonen, die mit allen meinen Apps funktionieren, also würde ich vermuten, dass das nicht das Problem ist. – JeffS

Antwort

1

Falls jemand anderes das gleiche Problem hat, denke ich, dass ich eine Lösung gefunden habe.

sah ich den Fehler in LogCat up:

04-06 00:27:13.510: E/AndroidRuntime(3163): android.os.NetworkOnMainThreadException 

Und dieses nach http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html

es scheint, dass einige (neueren) Android-Versionen wie keine Internetverbindungsanforderungen in der MainActivity oder etwas erlauben Das.

Obwohl ich android Version 10 (2.3) anvisierte, hatte ich immer noch den Fehler, also änderte ich mein Projektziel auf Version 8 und es scheint jetzt in Ordnung zu funktionieren.

1

Ich setze voraus, dass Sie eine andere API API KEY verwenden, um die App zu emulieren, und eine andere mit Ihrer MD5 signierte Signatur, um die App auf Geräten auszuführen. Schau es dir an here.

+0

+1 für diese, in der Regel die Karte Aktivität wird wie ein leeres Gitter sehen gerade, aber das ist ein guter Ort, – HoratioCain

+0

@Pelanes Ich bin mir nicht sicher, ob ich verstehe, was Sie meinen zu starten. Da es die gleiche Anwendung mit dem gleichen Code läuft auf dem Emulator ist und das gleiche genau läuft auf meine beiden Geräten ... Bitte beachten Sie auch, dass, wenn ich zum ersten Mal des Maps API-Schlüssel generierte alle habe ich graues Gitter waren (auf meinem Emulator. läuft immer noch nicht auf Geräten). Dann sah ich ein CornBoyzAndroid Tutorial auf YouTube und ich erstellt eine Maps API Key für das Debuggen, die meine Karte perfekt auf dem Emulator zu laden erlaubt, aber noch nicht auf meinen Geräten nicht funktionieren. – bubbly

+0

@RobLourens orange Zeichen ist dies: http://i44.tinypic.com/e9hk07.png Auf dem Ace wenn ich auf Anmelden (den Schritt vor der Karte) es reagiert einfach nicht, und dann es reagiert, aber es ist, als hätte ich nichts gedrückt. Wenn ich es erneut drücke, passiert es wieder. Die Nachricht "Force Close" wird nicht angezeigt. Das Motorolla tut zwar ... Das Ace gibt keine Fehler auf dem LogCat auf ... Das Motorolla gibt einige, aber ich verstehe sie wirklich nicht wirklich. Ich habe sie in zwei verschiedenen .txt-Dateien gespeichert. Lade sie unten herunter. http://www.mediafire.com/?plmhhk9f3p4vflk – bubbly

Verwandte Themen