Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C# und .NET ::  Programmierung Handy App     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
boenz666
Mitglied

Benutzerprofil
Anmeldungsdatum: 31.03.2008
Beiträge: 101
Beitrag boenz666 Mitglied 19:39:20 31.07.2017   Titel:   Programmierung Handy App            Zitieren

Ich habe neuerdings angefangen ein bischen mit der Programmierung von HandyApplications rumzuspielen.
In diesem Teil bin ich leider noch relativ frisch und hadere mit einem Problem, bei dem ich nicht weiter komme.

Das was an Informationen von Nöten ist => Meine Umgebung:
Zitat:

Visual Studio Professional 2017
Integriertes Xamarin Studio
Debugging auf einem realen Device (Android Samsung Galaxy S7)
Entwicklertools auf dem Handy aktiviert
Webrequest-Target Api Schnittstelle
Programmiert wird eine Xamarin Forms Anwendung

Einstellungen im Projekt:
Http Client Implementierung => Android
SSL/TLS- Implementierung => Natives TLS 1.2+
(ohne die beiden Einstellungen haben WebRequests nicht funktioniert.
Es kam nicht Mal zu einer Antwort des Zielservers. )


Ich habe es nun geschafft eine Applikation auf das Handy zu bekommen.
Dort habe ich schlicht eine Activity, die über mehrere Buttons auf SubActivities zugreifen lässt.
Eine dieser Subactivities soll eine Suche über das Web realisieren.

Dazu muss ich sagen, dass das auf dem PC ziemlich easy going war. In der App wird die Suche über einen Button gestartet, der asynchron verläuft, weil ich bei meinen Recherchen festgestellt habe, dass das sinnvoll ist, damit die App nicht einfriert, solange der Webrequest auf die Rückmeldung des Servers wartet.

Auf dem Handy erhalte ich leider stets die Fehlermeldung:
Zitat:
Exception:

System.Net.WebException: The remote server returned an error: (401) Unauthorized.


Dies liegt nach Recherche an fehlerhaften Credentials oder Authorisierungstoken.
Die Credentials werden für den Zugriff nun garnicht benötigt, dass ist auch schon auf dem PC in einer Windows Forms Anwendung so gewesen und der Token hat dort funtkioniert. Genau deshalb verstehe ich nicht, wieso es auf dem Handy nicht funktioniert?

Der Aufruf in der Activity sieht wiefolgt aus:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
var btnSearch = new Button(this)
{
    Text = "Suchen"
};
btnSearch.Click += async (sender, e) => {
string search = entry.Text;
Task<int> sizeTask = RequestMetaProduct(search);
....
var intResult = await sizeTask;
};
 
Layout.AddView(btnSearch);


Wundert euch nicht, dass ich hier nur ein int verwurste, dass ist einfach nur ein schlichter Test, der erstmal klar machen soll, ob ich überhaupt etwas als Rückmeldung erhalte.

C#:
1
2
3
4
5
6
7
8
9
10
public static async Task<int> RequestMetaProduct(string name)
{
    string url = "https:...API Adresse";
           
    Task<JsonValue> contentsTask = RequestFromServerAsync(url);
    string contents = await contentsTask;
 
    int exampleInt = contents.Length;
    return exampleInt;
}


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private static async Task<JsonValue> RequestFromServerAsync(string url)
{
    try
    {
        string responseString = string.Empty;
        string method = "GET";
 
        Uri uri = new Uri(url);
        HttpWebRequest request = new HttpWebRequest(uri)
        {
            Method = method
        };
 
        var header = new OAuthHeader();
 
        string authorizationheader = await header.GetAuthorizationHeader(method, url);
        request.Headers.Add(HttpRequestHeader.Authorization, authorizationheader);
        request.ContentType = "application/json";
        var response = (HttpWebResponse)await request.GetResponseAsync();
             ....


Meine Vermutung ist aktuell, dass der Fehler potentiell auftritt, weil header.GetAuthorizationHeader zwar als Async deklariert ist, die Methode wird aber synchron ausgeführt, weil ich da keine Await Bezeichner reingebaut bekomme.
Ich verstehe diese immer so, dass sie angewendet werden können, wenn es einen weiteren Methodenaufruf gibt innerhalb der Methode. Ich weiß aber nicht, wie das in einer schlichten Methode gehen soll:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public async Task<string> GetAuthorizationHeader(string method, string url)
{
    ...
    HMAC hasher = HMACSHA1.Create();
    hasher.Key = Encoding.UTF8.GetBytes(signatureKey);
    Byte[] rawSignature = hasher.ComputeHash(Encoding.UTF8.GetBytes(baseString));
    String oAuthSignature = Convert.ToBase64String(rawSignature);
 
    ...
 
       
    String authHeader = "OAuth " + String.Join<String>(", ", headerParamStrings);
 
    return authHeader;
}


Kann das Problem mit meiner Vermutung zu tun haben?
Wenn ja, wie asynchronisiere ich dann so eine Methode?
Oder hat jemand eine Idee, wie der Fehler anderweitig zu Stande kommen kann?
Wenn dazu noch Informationen fehlen, dann reiche ich die gerne nach.
cpp_Jungspund
Mitglied

Benutzerprofil
Anmeldungsdatum: 10.06.2015
Beiträge: 172
Beitrag cpp_Jungspund Mitglied 14:55:42 07.08.2017   Titel:              Zitieren

Hi

Könnte an einem Fehlerhaften Android Manifest liegen. Check das mal.

Grüße
C++ Forum :: C# und .NET ::  Programmierung Handy App   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.