Java 如何将变量传递到此run()函数?
我在这里谈论的这个类来自于Android的毕加索库。 我在这个函数中有一个名为“ImageName”的变量。 但是,我似乎不知道如何将参数传递给函数以更改变量名称。我已经尝试扩展目标类,但我似乎仍然会出错,而且我还没有足够的能力知道我做错了什么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
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会给出一个错误,显示“此处不需要接口”?我应该在哪里使用这些代码?应该是“哦,哇,这比我想象的要容易得多!”!谢谢你,玛辛!