【发布时间】:2018-01-22 09:37:08
【问题描述】:
我正在创建一个注册应用程序,除了一个问题之外,几乎所有的工作都可以。 好的,现在我将向您展示代码。有点长。
public interface SupportopApi {
@POST("/api/registration")
Call<ResponseBody> registration (@Body SupportopObj supportopObj);}
这是界面。 现在我将向您展示由 JsonPoJo 解析的模型。
public class SupportopObj {
@SerializedName("username")
@Expose
private String username;
@SerializedName("password")
@Expose
private String password;
@SerializedName("email")
@Expose
private String email;
@SerializedName("firstName")
@Expose
private String firstName;
@SerializedName("lastName")
@Expose
private String lastName;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}}
好的,这是模型,我是在片段中做的,所以这里是 MainActivity
public class MainActivity extends AppCompatActivity {
FrameLayout cont;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ApiClient.initializeInstance("https://supportop.eu-gb.mybluemix.net/");
cont = findViewById(R.id.container);
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new FragmentActivity()).commit();
}}
这是改造类,我在其中初始化改造。
public class ApiClient {
private static ApiClient instance;
private SupportopApi supportopApi;
private ApiClient(String endpoint) {
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS);
clientBuilder.addInterceptor(chain -> {
Request request = chain.request();
request = request.newBuilder()
.addHeader("Content-Type", "application/json")
.build();
return chain.proceed(request);
});
supportopApi = new Retrofit.Builder()
.baseUrl(endpoint)
.client(clientBuilder.build())
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(SupportopApi.class);
}
public static synchronized void initializeInstance(String endpoint) {
if (instance == null) {
instance = new ApiClient(endpoint);
}
}
public static synchronized ApiClient getInstance() {
if (instance == null) {
throw new IllegalStateException("PentairAPIClient has not been initialized.");
}
return instance;
}
public Call<ResponseBody> registration(SupportopObj supportopObj) {
return supportopApi.registration(supportopObj);
}
}}
这是主要的片段类。
public class FragmentRegistration extends Fragment {
View mainView;
EditText username, email, password, name;
Button button;
ApiClient pentairAPIClient = ApiClient.getInstance();
SupportopObj supportopObj = new SupportopObj();
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
mainView = getLayoutInflater().inflate(R.layout.registration, container, false);
username = mainView.findViewById(R.id.username);
email = mainView.findViewById(R.id.email);
password = mainView.findViewById(R.id.password);
name = mainView.findViewById(R.id.name);
button = mainView.findViewById(R.id.register);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
supportopObj.setUsername(username.getText().toString());
supportopObj.setEmail(email.getText().toString());
supportopObj.setPassword(password.getText().toString());
updateApp();
}
});
return mainView;
}
public void updateApp() {
FragmentRegistration context = this;
Call<ResponseBody> call = pentairAPIClient.registration(supportopObj);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
Toast.makeText(getContext(), String.valueOf(response.body()),
Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(getContext(), "Something went wrong",
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
Toast.makeText(getContext(), "Error...", Toast.LENGTH_SHORT).show();
}
});
}
}}
好的,让我解释一下我的问题。当我点击注册时,我必须从response.body 收到一条消息,上面说注册成功。首先,我尝试将呼叫注册无效,例如Call<Void> registration,但这会返回response.body null。
现在,当我在调用正文 Call<ResponseBody> registration 时,他会返回 OkHttp3:{ResponseBody$1@830038646440} 这样的东西。
当我在正文中进行调试时,有一个内容,看起来像这样
content = {Buffer@830038501160} "[text="Registration Successfully completed"]"
这是图片。我该如何解决这个问题,我想成功完成文本注册。
【问题讨论】:
-
我会阅读
ResponseBody文档并选择正确的方法
标签: java android retrofit response