我有这段代码,我把它从stackoverflow和有点改变它。该代码检索图库的内容并将每个图像路径放入数组列表中。然后它随机选择ArrayList中的一个路径,并将其作为ImageView的资源。感谢您的关注。为什么我会得到“java.lang.IllegalArgumentException”错误?
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Handler;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import java.util.ArrayList;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
Handler handler = new Handler();
private ImageView randomPicture;
private Bitmap currentBitmap = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
randomPicture = (ImageView)findViewById(R.id.random_picture);
final ArrayList<String> imagesPath = new ArrayList<>();
String[] projection = new String[]{
MediaStore.Images.Media.DATA,
};
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
Cursor cur = getContentResolver().query(images, projection, null, null, null)
if(cur == null) {
randomPicture.setImageResource(R.drawable.picture);
}
else {
if (cur.moveToFirst()) {
int dataColumn = cur.getColumnIndex(
MediaStore.Images.Media.DATA);
do {
imagesPath.add(cur.getString(dataColumn));
} while (cur.moveToNext());
}
cur.close();
final Random random = new Random();
final int count = imagesPath.size();
handler.post(new Runnable() {
@Override
public void run() {
int number = random.nextInt(count);
String path = imagesPath.get(number);
if (currentBitmap != null)
currentBitmap.recycle();
currentBitmap = BitmapFactory.decodeFile(path);
randomPicture.setImageBitmap(currentBitmap);
handler.postDelayed(this, 1000);
}
});
}
}
}
它崩溃就行与错误光标:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.postcards, PID: 2424
java.lang.IllegalArgumentException: n <= 0: 0
at java.util.Random.nextInt(Random.java:182)
at com.example.postcards.MainActivity$1.run(MainActivity.java:53)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
请告诉我哪行是** MainActivity.java:53 **? –
正如Mehran所说,突出MainActivity行53 – Zoe
谢谢你所有的答案。我明白了! –