2016-06-18 12 views
0

ich Mikrotik Java API in meinem Android-ProjektWie ein Api Verbindungsobjekt zu übergeben und es in verschiedenen Aktivitäten verwenden

bin mit, was ich versuche zu erreichen:

  • Anmeldung mit der Info
  • Speichern sie die Verbindung im Hintergrund
  • die Verbindung in allen actitives verwenden, die ApiConnection in verschiedene Aktivitäten zu teilen, es zu benutzen wie con.login()con.execute() von jeder Aktivität

Ich habe das Login-Formular, nachdem es submiting es die Info sendet und startet eine intentService, da ich die Verbindung herstellen

@Override 
protected void onHandleIntent(Intent intent) { 
    try { 
     try { 
      String host = intent.getStringExtra("host"); 
      String username = intent.getStringExtra("username"); 
      String password = intent.getStringExtra("password"); 

      ApiConnection con = ApiConnection.connect(host); 
      con.login(username, password); 

      // Connected 

     } catch (Exception e) { 
      // Exception 
     } 
    } catch (Exception e) { 
     // Exception 
    } 
} 

ich von diesem intentService Herstellung der Verbindung succedded, aber ich kann ‚t die Ausnahmen behandeln, wenn es ein Verbindungsproblem ist, auch Toast Meldungen zeigen nicht in der onHandleIntent

ich denke, was ich tue macht keinen Sinn und keine Logik.

Wie könnte ich so etwas erreichen?

+0

Klasse erstellen, die einzelne Instanz Ihrer Verbindung api hält und sie dann in verschiedenen Aktivitäten verwenden. Da es Singleton ist, wird es das gleiche Objekt teilen, so dass es nach dem Verbinden für alle verbunden sein wird. – androidnoobdev

+0

Nun, wie kann ich die Login-Formular-Informationen an diese Singleton-Klasse senden, um die Login-Authentifizierung durchzuführen, wie kann ich es in jeder Aktivität enthalten, können Sie die Struktur dafür schreiben? Vielen Dank. –

+0

Verwenden Sie Singleton nur für eine Verbindung, nicht für Operationen. Was ich meine ist, dass Sie eine Klasse erstellen, die eine Verbindung hält, jedes Mal, wenn Sie ein Objekt von dieser Klasse verbinden und dann Operationen in einer einzelnen Aktivität oder einem Fragment ausführen. Um mehr über Singleton zu wissen, überprüfen Sie dies - http://idiotechie.com/singleton-design-pattern-an-inspospection-and-best-practices – androidnoobdev

Antwort

0

Try con Objekt als statisch in Haupttätigkeit zu erklären, wo Sie Verbindung bekommen, und es dann überall wie pro Ihre Anforderung verwenden,

unten Struktur Siehe

In Hauptaktivität

public static ApiConnection con; 

An Verbindung Erste

con = ApiConnection.connect(host); 

Crate eine Methode, um diese Verbindung in Haupttätigkeit zu erhalten, wie unten

public static ApiConnection getCon() 
    { 
     if(con != null) 
      return con; 
     else 
      return null; 
    } 

Jetzt

ApiConnection con = = MainActivity.getCon(); 
    if(con != null) 
    { 
     // Use Your Logic Here 
    } 
+0

Entschuldigung, was meinst du "On Getting Connection"? Ich kann keine Netzwerkoperationen in der Hauptaktivität ausführen, ich muss AsynTask im Hintergrund verwenden, kannst du das mehr erklären? Danke vielmals. –

0

@Amr SubZero I don von unten Code, um dieses Objekt in jeder Aktivität verwenden‘ Ich habe eine API-Setup und alles, also habe ich gerade diese Klassen erstellt, um Ihnen den Fluss zu erklären.

import android.util.Log; 

/** 
* Created by Wasim on 18-06-2016. 
*/ 
public class SingletonApiConnection { 

    private static final String TAG = "SingletonApiConnection"; 

    private static SingletonApiConnection apiInstance = null; 

    private SingletonApiConnection() { 
    } 

    public SingletonApiConnection(String host) { 
     apiInstance.connect(host); 
     Log.d(TAG, "Object Created."); 
    } 

    public static SingletonApiConnection getInstance(String host) { 

     if (null == apiInstance) { 
      apiInstance = new SingletonApiConnection(host); 
     } 

     return apiInstance; 
    } 
} 

Intent Service

public class NetworkRequestService extends IntentService { 

    /** 
    * Creates an IntentService. Invoked by your subclass's constructor. 
    * 
    * @param name Used to name the worker thread, important only for debugging. 
    */ 
    public NetworkRequestService(String name) { 
     super(name); 
    } 

    @Override 
    protected void onHandleIntent(Intent intent) { 

     // get object with host 
     String host = intent.getStringExtra("host"); 
     SingletonApiConnection connection = SingletonApiConnection.getInstance(host); 

     String username = intent.getStringExtra("username"); 
     String password = intent.getStringExtra("password"); 

     // now call login 
     connection.login(username, password); 

     // now use this at any class it will have loggedin instance b'z it is singleton. 

    } 
} 

Und Login

Intent networkService = new Intent(LoginActivity.this, NetworkRequestService.class); 
// add intent parameters here 
startService(networkService); 
+0

Ich bekomme eine Warnung, dass .connect in der Singleton-Klasse nicht definiert ist, weil ich die Klasse, die ich benutze "mikrotik" auch im intentService wo connection.login() also wo soll ich die Klasse "mikrotik" importieren importieren ? um diese Funktionen zu definieren .connect & .connection? eine andere Sache, kann ich das Objekt "Verbindung" in allen Aktivitäten wie connection.excute() verwenden? Danke @androidnoobdev –