Java 如何将变量传递到此run()函数?

Java 如何将变量传递到此run()函数?,java,android,multithreading,runnable,picasso,Java,Android,Multithreading,Runnable,Picasso,我在这里谈论的这个类来自于Android的毕加索库。 我在这个函数中有一个名为“ImageName”的变量。 但是,我似乎不知道如何将参数传递给函数以更改变量名称。我已经尝试扩展目标类,但我似乎仍然会出错,而且我还没有足够的能力知道我做错了什么 private Target target = new Target() { @Override public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom fro

我在这里谈论的这个类来自于Android的毕加索库。 我在这个函数中有一个名为“ImageName”的变量。 但是,我似乎不知道如何将参数传递给函数以更改变量名称。我已经尝试扩展目标类,但我似乎仍然会出错,而且我还没有足够的能力知道我做错了什么

private Target target = new Target() {
    @Override
    public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from)
{
        new Thread(new Runnable() {
            @Override
            public void run() {

                File file = new File(
                        Environment.getExternalStorageDirectory().getPath()
                                + ImageName + ."jpg");//+ "/saved.jpg");
                try {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
                    ostream.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {}

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {}
};
//我同时想到的是

public interface TargetImageName extends Target
{

    public void TargetImageName(String ImageName);

    @Override
    void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from);

    @Override
    void onBitmapFailed(Drawable errorDrawable);

    @Override
    void onPrepareLoad(Drawable placeHolderDrawable);
}

private TargetImageName target2 = new TargetImageName() {
    String name;
    @Override
    public void TargetImageName(String ImageName) {
        name = ImageName;
    }

    @Override
    public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
        new Thread(new Runnable() {
            @Override
            public void run() {

                File file = new File(
                        Environment.getExternalStorageDirectory().getPath()
                                + name);//+ "/saved.jpg");
                try {
                    file.createNewFile();
                    FileOutputStream ostream = new FileOutputStream(file);
                    bitmap.compress(Bitmap.CompressFormat.JPEG,100,ostream);
                    ostream.close();
                }
                catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    @Override
    public void onBitmapFailed(Drawable errorDrawable) {}

    @Override
    public void onPrepareLoad(Drawable placeHolderDrawable) {}
};

无法将任何内容传递给
run()
,因为它不带参数。您只需扩展
Runnable
并通过构造函数传递所需的内容:

public class MyRunnable implements Runnable {
     protected Integer mFoo;

     public MyRunnable(Integer foo) { 
        mFoo = foo;
     }

     @Override
     public void run() {
          // access mFoo when you need it
           ...
     }
}
然后

...
 new Thread(new MyRunnable(...)) {
    ...

无法将任何内容传递给
run()
,因为它不带参数。您只需扩展
Runnable
并通过构造函数传递所需的内容:

public class MyRunnable implements Runnable {
     protected Integer mFoo;

     public MyRunnable(Integer foo) { 
        mFoo = foo;
     }

     @Override
     public void run() {
          // access mFoo when you need it
           ...
     }
}
然后

...
 new Thread(new MyRunnable(...)) {
    ...

创建一个实现目标的类,而不是另一个接口

public class TargetImageName implements Target
    {
        String name;
        public  TargetImageName(String ImageName) {
            name = ImageName;
        }
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {

        ...}
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        ...}

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
        ...}
    }
现在创建一个对象并将其作为
Picasso
回调对象传递

Picasso.with(getActivity()).load(<url>).into(new TargetImageName(<parameter>));
Picasso.with(getActivity()).load()。放入(new TargetImageName());

创建一个实现目标的类,而不是另一个接口

public class TargetImageName implements Target
    {
        String name;
        public  TargetImageName(String ImageName) {
            name = ImageName;
        }
        @Override
        public void onBitmapFailed(Drawable errorDrawable) {

        ...}
        @Override
        public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
        ...}

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {
        ...}
    }
现在创建一个对象并将其作为
Picasso
回调对象传递

Picasso.with(getActivity()).load(<url>).into(new TargetImageName(<parameter>));
Picasso.with(getActivity()).load()。放入(new TargetImageName());

扩展类目标是在其构造函数中包含参数的方法。那么您发现了什么错误?扩展目标接口是一种冒险,但我在这里所做的方式似乎无论如何都不起作用。我无法实例化TargetImageName target2=TargetImageName(“ASD){}只是给出了一个“无法应用”错误。扩展类目标是在其构造函数中包含参数的方法。那么您发现了什么错误?扩展目标接口是一种冒险,但我在这里所做的方式似乎无论如何都不起作用。我无法实例化TargetImageName target2=TargetImageName(“ASD){}只是给出了一个“无法应用”错误。很抱歉,我没有及时看到您的答复,无法编辑该问题:/n不确定问题出在哪里,但如果您认为有帮助,您可以随时回滚对该问题的编辑。只需单击““当我这样做时,它似乎在函数中工作,但Runnable给出了一个错误,表示“此处不需要接口”?我应该在哪里使用这些代码?应该是“哦,哇,这比我想象的要容易得多!”!谢谢你,玛辛!抱歉,我没有及时看到您的回复,无法编辑问题:/n不确定问题出在哪里,但如果您认为这会有帮助,您可以随时回滚对问题的编辑。当我这样做时,只需单击“”,它似乎在函数中工作,但Runnable会给出一个错误,显示“此处不需要接口”?我应该在哪里使用这些代码?应该是“哦,哇,这比我想象的要容易得多!”!谢谢你,玛辛!