Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将方法响应重用改造为另一个活动_Java_Android_Methods_Retrofit2_Reusability - Fatal编程技术网

Java 将方法响应重用改造为另一个活动

Java 将方法响应重用改造为另一个活动,java,android,methods,retrofit2,reusability,Java,Android,Methods,Retrofit2,Reusability,如何从getDataForId(Integer.toString(1))获取数据;通过从DisplayData类调用相同的getDataForId方法 我希望重用相同的方法并得到结果。 将同一个方法复制并粘贴到另一个activity类中是没有意义的。然后,相同的代码将重复两次 这是我的DisplayData.class public class DisplayData extends AppCompatActivity { Detail reqDetail; String

如何从getDataForId(Integer.toString(1))获取数据;通过从DisplayData类调用相同的getDataForId方法

我希望重用相同的方法并得到结果。 将同一个方法复制并粘贴到另一个activity类中是没有意义的。然后,相同的代码将重复两次

这是我的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) {

            }
        });
    }

您应该创建一个BaseActivity,并从中扩展另外两个。然后,将要在这两种方法中使用的方法都放在BaseActivity中,并将其公开,以便正确使用

请注意,您在方法中所需的任何外部内容在BaseActivity中都不可用,因此您应该传入构造函数,或者尽可能在BaseActivity中声明它

您还应该考虑如何返回方法,以便访问其结果

您可以参考此问题了解更多信息:


所以,如果要使用一个活动对另一个活动的响应

然后,首先将响应保存到列表或ArrayList

然后使用
Intent
传递数据


这应该是一个技巧。

创建一个类来进行这样的改装调用

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 );
}
}
SampleClass sampleClass = new SampleClass();
sampleClass.setOnDataListener(new SampleClass.DataInterface() {
    @Override
    public void responseData(MyResponse myResponse) {

    }
 });
sampleClass.getDataForId("UR ID");
同样,在类中,将ID存储为私有memeber变量

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);
          }
    }
List details=myResponse.getDetails();
用于(详图d:详图){
如果(d.getId()等于(您的_ID)){
reqDetail=d;
name.setText(reqDetail.getName());
毕加索.with(DisplayData.this)
.load(reqDetail.getName())
.占位符(R.mipmap.ic_启动器)
.错误(R.mipmap.ic_启动器)
.进入(图像);
}
}

我不想故意传递数据。我想每次都从那个类调用full方法并得到结果。所以我的DisplayData就像basicactivity一样,那么在扩展它之后,我如何检索相同的方法并得到结果呢。你能告诉我吗?你能告诉我应该在哪里将响应代码声明到SampleClass或其他活动类中{MyResponse MyResponse=response.body();List details=MyResponse.getDetails();for(Detail d:details){if(d.getId().equals(id)){reqDetail=d;name.setText(reqDetail.getName());}这些事情可以在活动中单独完成否?列表可以在不同的活动中维护不同,并且setText方法特定于活动编号。您只能在该回调方法中执行。它也将被格式化。嘿,兄弟,我已经在其他活动类中声明了该方法。但它不能从SampleClass和als获得相同的ido我试图创建本地字符串id变量。但我没有得到任何响应。请看,此错误id是您从活动no.传递的id。请将传递的id保留为私有成员变量,而不是在使用该id进行结果检查时。您不会得到错误。我想,您不需要传递id,除非您在retrof中使用它it类..保持活动状态并检查..希望这能解决您的问题
  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);
          }
    }