Brauche Hilfe für retrofit-login-Beispiel?
http://172.16.7.203/sfAppServices/SF_UserLogin.svc/rest/login/
in diesem username und Passwort ist ein Teil davon ich post müssen die vom Benutzer eingegebenen Benutzernamen und das Kennwort aus edittext und immer json-Antwort, wie diese
{"Result":"1","UserID":"0"}
wie man json mit Nachrüstung . Habe ich erfolgreich gemacht, dies mit asynctask . Aber das Gefühl ziemlich schwierig zu implementieren, durch Nachrüstung.
meine Frage ist
- Das ist die Basis-url?
- in-Schnittstelle, die verfügbar gemacht werden sollten in post-Methode.
- Wie bekomme ich die json-Antwort vom rest-service über json .
Unten ist meine Haupttätigkeit:
package com.example.first.servicefirst;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
import retrofit.Callback;
import retrofit.GsonConverterFactory;
import retrofit.Response;
import retrofit.Retrofit;
public class MainActivity extends Activity {
EditText password,userName;
Button login,resister;
ProgressBar progressbar;
TextView tv;
String url="http://172.16.7.203/sfAppServices/SF_UserLogin.svc/rest/login/";
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
password=(EditText) findViewById(R.id.password);
userName=(EditText) findViewById(R.id.txtEmployeeCode);
login=(Button) findViewById(R.id.btnsignin);
userName.setBackgroundResource(R.drawable.colorfoucs);
//progess_msz.setVisibility(View.GONE);
ConnectivityManager cn=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nf=cn.getActiveNetworkInfo();
if(nf != null && nf.isConnected()==true )
{
Toast.makeText(this, "Network Available", Toast.LENGTH_LONG).show();
} else {
showAlertDialog(MainActivity.this,"No Network","Please Check Your Network Connectivity",true);
}
final ConnectionDetector cd = new ConnectionDetector(getApplicationContext());
login.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
progressbar = (ProgressBar) findViewById(R.id.progressBar);
progressbar.setVisibility(View.VISIBLE);
login();
}
});
}
public void showAlertDialog(Context context, String title, String message, Boolean status) {
AlertDialog alertDialog = new AlertDialog.Builder(context).create();
//Setting Dialog Title
alertDialog.setTitle(title);
//Setting Dialog Message
alertDialog.setMessage(message);
//Setting alert dialog icon
//Setting OK Button
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
//Showing Alert Message
alertDialog.show();
}
public void login(){
Retrofit retro = new
Retrofit.Builder().baseUrl("http://172.16.7.203").addConverterFactory(GsonConverterFactory.create()).build();
RetrofitRest retrofitRest = retro.create(RetrofitRest.class);
String s1 = userName.getText().toString();
String s2 = password.getText().toString();
if (s1.equals("")) {
userName.setError("Enter User Name");
}
if (s2.equals("")) {
password.setError("Enter Password");
}
retrofitRest.login(s1,s2, new Callback<ModelLogin>() {
@Override
public void onResponse(Response<ModelLogin> response, Retrofit retrofit) {
Intent intent = new Intent(MainActivity.this, Main2Activity.class);
startActivity(intent);
}
@Override
public void onFailure(Throwable t) {
}
});
}
}
Unten ist mein interface:
public interface RetrofitRest {
@FormUrlEncoded
@POST("/sfAppServices/SF_UserLogin.svc/rest/login/")
Callback<ModelLogin> login(@Query("empcode") String employeecode, @Query("password") String password,
Callback<ModelLogin> callback);
}
Mein pojo:
package com.example.first.servicefirst;
import com.google.gson.annotations.SerializedName;
public class ModelLogin {
private String empcode;
private ModelLogin(){}
@SerializedName("Result")
private String result;
public String getResult(){
return result;
}
private String password;
public String getEmpcode() {
return empcode;
}
public String getPassword() {
return password;
}
public void setEmpcode(String empcode) {
this.empcode = empcode;
}
public void setPassword(String password) {
this.password = password;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Ihre Anfrage Parameter path-Parameter, die Sie nicht brauchen, ein DTO für Ihre Anfrage. Erstellen Sie einfach ein DTO für Ihre Antwort wie diese.
Und können analysieren Ihre URL, und erstellen Sie Ihre service-Schnittstelle. Ich denke, die Basis url wird "http://172.16.7.203/sfAppServices/" und andere sind für die service-Identifizierung. Es hängt stark von anderen Dienstleistungen, die Sie verwenden möchten. Wenn Sie nur über login-service können Sie sogar Ihre Basis-url wie dieser "http://172.16.7.203/sfAppServices/SF_UserLogin.svc" aber diese Entscheidungen ändern Ihre service-Annotationen.
Endlich Ihr retrofit-Instanz. Sie sollten nicht Ihre
Retrofit
Instanz immer und immer wieder. Stattdessen erstellen Sie in Ihrer Anwendung oder Verwendung einer singleton-Muster und bekommenLoginService
wenn Sie es brauchen.Update
Da man sich mit Retrofit-2 verwenden Sie einen Dienst wie dieser.
Callack
Klasse? Es sollteretrofit
, (full class nameretrofit.Callback
).Schreiben Sie folgenden code in Ihre Tätigkeit
Callback ändern Sie diese nach Ihrem Bedarf
Müssen Sie erstellen eine Schnittstelle, in dem Sie brauchen, um zu erstellen, login-API-Aufruf Methode