2016-04-26 17 views
1

Also mache ich eine Test-Login-App, damit ich sehen kann, wie sich die App und der Server zusammen verhalten. Also habe ich drei Endpunkte, mit denen ich arbeite. Alle drei herunterladen JSON-Datei, so dass ich das ausdrucken kann kein Problem. Das Problem ist, dass sie alle einen Benutzernamen und ein Passwort erfordern. Ich habe die erste heruntergeladen, kein Problem und es funktioniert perfekt. Ich verwende die Androiden, die im authenticator in meiner httpClass eingebaut werden, um damit umzugehen. Alles, was ich tun muss, ist, meinen Benutzernamen und mein Passwort zu übergeben und es funktioniert gut.Standardauthentifizierung android UrlConnection Get

Ein weiterer Endpunkt wird prüfen, ob sich der Benutzer am Server anmelden kann. Dies gibt auch einen JSON zurück. Es erfordert auch einen Benutzernamen und ein Passwort. aber es wird nicht mit dem Authentifikator funktionieren, den ich für den ersten benutzt habe. Es gibt mir immer noch eine nicht gefundene Ausnahme und das ist es. Die einzige Möglichkeit, die ich bekommen kann, ist, die URL zu erstellen und an die httpclass zu senden. Durch manuelles den Benutzernamen und das Passwort wie dieses Hinzufügen

http://mywebpage/endpoint1 

und fügen Sie dann die Informationen wie dieses

http://mywebpage/endpint2 

Ich tue dies manuell mit Code. Ich denke nicht, dass dies der richtige Weg ist, denn der erste, den ich arbeite, sieht wie der richtige Weg aus. Irgendwelche Vorschläge würden geschätzt werden.

Das ist mein html-Klasse, die ich

public class MyHttpClass extends AsyncTask<String, Void, String> { 

private String user; 
private String pass; 
Activity act; 

//this is used if you need a password and username 
//mainly for logins to a webserver 
public MyHttpClass(String user, String pass) 
{ 
    this.user = user; 
    this.pass = pass; 

} 

@Override 
protected String doInBackground(String... params) { 
     String url = params[0]; 
     return http(url); 
} 
private String http(String myUrl) 

{ 
    String respone = null; 
    HttpURLConnection urlConnection = null; 
    try 
    { 
     URL url = new URL(myUrl); 
      Authenticator.setDefault(new Authenticator() { 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(user, pass.toCharArray()); 
       } 
      }); 

     urlConnection = (HttpURLConnection)url.openConnection(); 

     InputStream inputStream = urlConnection.getInputStream(); 

     if(inputStream != null) 
     { 
      respone = streamToString(inputStream); 
      inputStream.close(); 
     } 

    }catch (IOException ie) 
    { 
     //ie.printStackTrace(); 
     Log.d("Issue with Http: " , "IOException"); 
     ie.printStackTrace(); 

    }finally { 
     if(urlConnection != null) 
     { 
      urlConnection.disconnect(); 
     } 
    } 
    return respone; 
} 

Und das ist die Hauptklasse, die ich alle meine Tests

public class MainActivity extends AppCompatActivity { 

EditText user, pass; 
TextView reuslt; 

String myJson; 
String param1 = "?email="; 
String param2 = "&password="; 

String email, password; 

String customerInfo, loginUrl, promo; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    customerInfo = "http://mywebpage/mobileCustomers"; 
    loginUrl = "http://mywebpage/mobileCustomers/validatePassword"; 
    promo = "http://a mywebpage/promotions"; 


    user= (EditText)findViewById(R.id.username); 
    pass = (EditText)findViewById(R.id.password); 
    reuslt = (TextView)findViewById(R.id.results); 
    Button promotion = (Button)findViewById(R.id.button); 
    Button crmTest = (Button)findViewById(R.id.user); 
    Button loginTest = (Button)findViewById(R.id.login); 

    if (promotion != null) { 
     promotion.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       email = user.getText().toString(); 
       password = pass.getText().toString(); 


       Log.d("User:" , email); 
       Log.d("Pass: ", password); 


       MyHttpGet task = new MyHttpGet(email, password); 
       try { 
        myJson = task.execute(promo).get(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       }catch (NullPointerException np) 
       { 
        np.printStackTrace(); 
       } 

       reuslt.setText(myJson); 

      } 
     }); 
    } 

    if (crmTest != null) { 
     crmTest.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       String email = user.getText().toString(); 
       String password = pass.getText().toString(); 

       email = param1 + email; 
       password = param2 + password; 

       Log.d("User:" , email); 
       Log.d("Pass: ", password); 
       String url = customerInfo+email+password; 
       Log.d("Url" , url); 
       MyHttpGet task = new MyHttpGet(email, password); 
       try { 
        myJson = task.execute(url).get(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       }catch (NullPointerException np) 
       { 
        np.printStackTrace(); 
       } 

       reuslt.setText(myJson); 

      } 
     }); 
    } 

    if (loginTest != null) { 
     loginTest.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       String email = user.getText().toString(); 
       String password = pass.getText().toString(); 
       email = param1 + email; 
       password = param2 + password; 

       Log.d("User:" , email); 
       Log.d("Pass: ", password); 
       String url = loginUrl+email+password; 
       Log.d("Url" , url); 

       MyHttpGet task = new MyHttpGet(email, password); 
       try { 
        myJson = task.execute(url).get(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } catch (ExecutionException e) { 
        e.printStackTrace(); 
       }catch (NullPointerException np) 
       { 
        np.printStackTrace(); 
       } 

       reuslt.setText(myJson); 

      } 
     }); 
    } 



} 

}

Antwort

1

Verwenden Volley Bibliothek in android tue bin mit . Es wird zusammen mit GSON verwendet, um eine benutzerdefinierte Anfrage zu erstellen, sodass Sie sich keine Gedanken über die JSON-Erstellung und JSON-Analyse machen müssen. Es ist alles sehr einfach.

Werfen Sie einen Blick auf diese Link http://developer.android.com/training/volley/request-custom.html

+0

Danke für den Link, ich versucht, mit OkHttp, aber ich mag nicht, wie es funktioniert und wie man es hatte einzurichten. Ich werde versuchen Volley, weil es offiziell von Android unterstützt wird. – MNM

Verwandte Themen