在最后一个putExtra下面的for循环中,即使它们采用不同的参数和不同的var,也会覆盖第一个putExtra。
首先:putExtra(String,String)
第二个:putExtra(String,int)
注意:videos [i]是一个字符串数组
Intent intent = new Intent(this,DownloadService.class);
for(int i=0;i<videos.length;i++){
intent.putExtra("VIDEOS",videos[i]);
intent.putExtra("FILENR",(i + 1));
startService(intent);
}
在我的扩展IntentService的DownloadService中,来自VIDEOS的值是null!
这是为什么 ?
编辑:
这是我的DownloadService类中的代码的一部分:
Intent broadcastIntent = new Intent();
notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, null, 0);
notification = new Notification(R.drawable.icon, "Skitips", System.currentTimeMillis());
contentView = new RemoteViews(getPackageName(), R.layout.progress_layout);
notification.flags = Notification.FLAG_AUTO_CANCEL;
notification.contentView = contentView;
notification.contentIntent = contentIntent;
contentView.setProgressBar(R.id.status_progress, 100, 0, false);
contentView.setTextViewText(R.id.status_text,"Downloading...");
String full_url = "";
full_url = URL + intent.getStringExtra("VIDEOS");
String fileName = "";
fileName = intent.getStringExtra("VIDEOS");
String fileNr = "";
fileNr = intent.getStringExtra("FILENR");
int count;
Log.e("Whattttttt","is the value of VIDEOOOOSSSS: " + full_url);
Log.e("Whatttt","is the value of fileNrrrrrrrrrrrr:" + fileNr);
try {
URL url = new URL(full_url);
URLConnection conexion = url.openConnection();
conexion.connect();
File file = new File(root.getPath(), fileName);
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream(file);
byte data[] = new byte[1024];
long total = 0;
contentView.setTextViewText(R.id.status_text,“正在下载(” + fileNr +“ / 77)”);
在粗体文本中有fileNr,我需要从其他活动中获取fileNr,但是在这种情况下,它为我提供了null ...
最佳答案
在您的问题中
对于不同的值,键始终保持不变,这就是为什么,
尝试使用
intent.putExtra(DownloadService.VIDEOS+i,videos[i]);
intent.putExtra(DownloadService.fileNr+i, i++);
并得到类似的结果
DownloadService.VIDEOS0,DownloadService.fileNr0,
DownloadService.VIDEOS1,DownloadService.fileNr1,
编辑:尝试此代码。
Intent intent = new Intent(this,DownloadService.class);
putStringArrayListExtra("Videos_key", videos);
startService(intent);
还有一件事,如果您传递
array of integer
和一些Array of video URI
,请尝试使用 putStringArrayListExtra(String name, ArrayList<String> value)
putIntegerArrayListExtra(String name, ArrayList<Integer> value)
并避免循环。
谢谢。
关于android - putExtra覆盖其他putExtra,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7738829/