改造方法响应重用到另一个 activity
Retrofit method response reusing into another activity
如何从 getDataForId(Integer.toString(1)); 获取数据?通过从 DisplayData class?
调用相同的 getDataForId 方法
我想重复使用相同的方法并得到结果。
将相同的方法复制并粘贴到另一个 activity class 中是没有意义的。然后会有相同的代码重复两次。
这是我的DisplayData.class
public class DisplayData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_data);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.body() != null) {
MyResponse myResponse = response.body();
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(id)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
这是我的 SecondData class 我想通过重复使用相同的方法来显示 DisplayData 的相同数据响应
public class SecondData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_main);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
}
}
您应该创建一个 BaseActivity 并从中扩展另外两个。然后,你把你想在它们两个中使用的方法放在 BaseActivity 中,并使它成为 public 这样你就可以正确地使用它。
请注意,您的方法中需要的任何外部方法都不会在 BaseActivity 中提供,因此您应该传入构造函数或尽可能在 BaseActivity 中声明它。
您还应该考虑您的方法的 return 应该如何让您访问其结果。
可以参考这个问题了解更多:
trying not to repeat myself (android/java)
因此,如果您想使用一个 Activity 对另一个 Activity 的响应,
然后,先将response保存到List或ArrayList中。
然后使用Intent
传递数据。
那应该可以解决问题。
创建一个 class 以像这样进行改造调用
public class SampleClass {
private DataInterface mListener;
public SampleClass() {
super();
}
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response!=null && response.body() != null && mListener != null) {
mListener.responseData(response.body());
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
public void setOnDataListener(DataInterface listener) {
mListener = listener;
}
public interface DataInterface {
void responseData( MyResponse myResponse );
}
}
在你的 activity 中,只需像这样调用 class
SampleClass sampleClass = new SampleClass();
sampleClass.setOnDataListener(new SampleClass.DataInterface() {
@Override
public void responseData(MyResponse myResponse) {
}
});
sampleClass.getDataForId("UR ID");
同样在您的 class 中将 ID 存储为私有成员变量
private Integer YOUR_ID;
然后在得到结果时将结果 ID 与此 ID 进行比较
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(YOUR_ID)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}
如何从 getDataForId(Integer.toString(1)); 获取数据?通过从 DisplayData class?
调用相同的 getDataForId 方法我想重复使用相同的方法并得到结果。 将相同的方法复制并粘贴到另一个 activity class 中是没有意义的。然后会有相同的代码重复两次。
这是我的DisplayData.class
public class DisplayData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.display_data);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response.body() != null) {
MyResponse myResponse = response.body();
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(id)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
这是我的 SecondData class 我想通过重复使用相同的方法来显示 DisplayData 的相同数据响应
public class SecondData extends AppCompatActivity {
Detail reqDetail;
String BASE_URL = "";
TextView name;
ImageView image;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second_main);
name = (TextView) findViewById(R.id.name);
image = (ImageView)findViewById(R.id.image);
}
}
您应该创建一个 BaseActivity 并从中扩展另外两个。然后,你把你想在它们两个中使用的方法放在 BaseActivity 中,并使它成为 public 这样你就可以正确地使用它。
请注意,您的方法中需要的任何外部方法都不会在 BaseActivity 中提供,因此您应该传入构造函数或尽可能在 BaseActivity 中声明它。
您还应该考虑您的方法的 return 应该如何让您访问其结果。
可以参考这个问题了解更多:
trying not to repeat myself (android/java)
因此,如果您想使用一个 Activity 对另一个 Activity 的响应,
然后,先将response保存到List或ArrayList中。
然后使用Intent
传递数据。
那应该可以解决问题。
创建一个 class 以像这样进行改造调用
public class SampleClass {
private DataInterface mListener;
public SampleClass() {
super();
}
public void getDataForId(final String id) {
ApiInterface apiInterface = APIClient.getApiInterface();
Call<MyResponse> call = apiInterface.getResponse();
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
if (response!=null && response.body() != null && mListener != null) {
mListener.responseData(response.body());
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
}
});
}
public void setOnDataListener(DataInterface listener) {
mListener = listener;
}
public interface DataInterface {
void responseData( MyResponse myResponse );
}
}
在你的 activity 中,只需像这样调用 class
SampleClass sampleClass = new SampleClass();
sampleClass.setOnDataListener(new SampleClass.DataInterface() {
@Override
public void responseData(MyResponse myResponse) {
}
});
sampleClass.getDataForId("UR ID");
同样在您的 class 中将 ID 存储为私有成员变量
private Integer YOUR_ID;
然后在得到结果时将结果 ID 与此 ID 进行比较
List<Detail> details = myResponse.getDetails();
for (Detail d : details) {
if (d.getId().equals(YOUR_ID)) {
reqDetail = d;
name.setText(reqDetail.getName());
Picasso.with(DisplayData.this)
.load(reqDetail.getName())
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(image);
}
}