2016-08-02 11 views
2

Ich mache Android-App in Visual Studio Xamarin, in App Login Bildschirm, wenn die Verbindung mit DataBase über Web Services zur Verifizierung des Passwortes I hergestellt wird Ich möchte einen progressDialog anzeigen, bis die Verbindung hergestellt ist.Async/erwarten nicht funktioniert "Zeichenfolge enthält keine Definition für GetAwaiter" und keine Erweiterung

Hier ist mein Code auf der onclient Seite:

private string login() 
{ 
    string x = null; 
    var progress = ProgressDialog.Show(this, "waiting", "Loading"); 
    progress.SetProgressStyle(ProgressDialogStyle.Spinner); 
    new Thread(new ThreadStart(delegate 
    { 
     RunOnUiThread(async() => 
     { 
      x = await services.Verification("abc", "xyz"); 
      progress.Dismiss(); 
     }); 
    })).Start(); 

    return x; 
} 

Auf der Serverseite:

public string Verification(string userName, string password) 
{ 
    SqlConnection conn = new SqlConnection(@""); 
    conn.Open(); 
    string query = "select category from ACCOUNTS where loginId = '" + userName + "' and pasword= '" + password + "'"; 
    SqlCommand cmd = new SqlCommand(query); 
    cmd.Connection = conn; 
    string catagory = null; 
    SqlDataReader account = cmd.ExecuteReader(); 

    if (account.HasRows) 
    { 
     if (account.Read()) 
     { 
      catagory = account[0].ToString(); 
     } 
    } 
    conn.Close(); 

    return catagory; 
} 

Hier ist der Fehler in login() Funktion auf der Leitung x = await services.Verification("abc", "xyz"); und es sagt:

'String' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'String' could be found (are you missing a using directive or an assembly reference?) 
+5

Da der Fehler, Ihnen zu sagen versucht, Sie nicht 'string' erwarten können. Sie müssen einige tatsächliche Async-APIs verwenden. – SLaks

+0

wie was? Ich bin neu in diesem ..... plz Hilfe! –

+4

'und pasword = '" + password + "'" '- Ich ... Ich bin nur ... sprachlos. Aus Liebe zum Internet ** bitte ** ein Sicherheitstraining, bevor du es in Produktion bringst. Tony Hunt hat ein [großes Video] (https://www.pluralsight.com/courses/owas-top10-aspdotnet-application-security-risks) verfügbar. –

Antwort

1

So verwenden Sie:

x = await services.Verification("abc", "xyz"); 

Sie haben eine API zu verwenden, wie:

public async Task<string> Verification(string userName, string password) 

Doch was sind Sie mit der DB kommunizieren mit? Offenbar rufen Sie die Verifikationsmethode direkt direkt auf, anstatt den Dienst über REST aufzurufen. Der direkte Aufruf der Methode funktioniert nicht, wenn Sie die Anwendung bereitstellen ... Sie müssen einen Proxy für einen Webdienst mithilfe von HttpClient mit async/await, RestSharp oder anderen, die in diesem Lernprogramm definiert sind, aufrufen: https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/.

von here Genommen:

var httpClient = new HttpClient(); 
Task<string> contentsTask = httpClient.GetStringAsync("http://xamarin.com"); 

string contents = await contentsTask; 
+0

Ich benutze WEB-SERVICES (ASMX) n Server ist auf Azure, Wie Sie nach der Verwendung sagten, ist der Fehler '' TaskOfString 'enthält keine Definition für' GetAwaiter 'und keine Erweiterungsmethode' GetAwaiter 'akzeptiert ein erstes Argument vom Typ' TaskOfString 'könnte gefunden werden (fehlt eine using-Direktive) oder eine Assembly-Referenz?) 'plzzz help !! –

+0

Das oben angeführte Beispiel ist nicht zu erwarten, weil es nicht async Task an erster Stelle implementiert.Sind Sie jedoch einen Proxy oder etwas eingerichtet? Weil, wenn ich Xamarin verwendet Um zu verbinden, musste ich das Code-Beispiel verwenden, wie ich oben erwähnte, aber 'httpClient.GetStringAsync (" HTTP PFAD ZU WEB-SERVICE AUF SERVER ") verwenden;' –

+0

ich bin Web-Referenzen (ASMX) zu meinem Code hinzufügen ... [hier können Sie sehen] (https://developer.xamarin.com/guides/cross-platform/application_fundamentals/web_services/#asmx) können Sie plzz mir helfen, wie man das macht ... machen Sie ein "erwartet" das implementieren "async" –