刚开始学习安卓开发,教材中这儿不是报错。哪位大神能说说怎么回事,谢谢

浅小易 2017-10-23 10:58:54
public VideoListActivity(Context context) {
super(context);

}
这个提示activity不能应用于activity()



import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import com.example.dfy.musicbox.adapter.VideoAdapter;
import com.example.dfy.musicbox.domain.MediaItem;
import java.util.ArrayList;

public class VideoListActivity extends Activity {

private ListView listView;
private TextView no_video;
private VideoAdapter videoAdapter;
private ArrayList<MediaItem> mediaItems;
//private Context context;

public VideoListActivity(Context context) {
super(context);

}


private Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
if (mediaItems != null && mediaItems.size() > 0) {
//有数据,设置适配器
videoAdapter = new VideoAdapter(context,mediaItems);
no_video.setVisibility(View.GONE);
listView.setAdapter(videoAdapter);
} else {
no_video.setVisibility(View.VISIBLE);
}

}
};


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video_list_activity);
listView = (ListView) findViewById(R.id.listview);
no_video = (TextView) findViewById(R.id.no_video);


//设置适配器
//读取数据—在子线中读取
new Thread() {
public void run() {
//读取数据—到准备好的数据库中读取
mediaItems = new ArrayList<MediaItem>();
Uri contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Video.Media.DISPLAY_NAME,//在sdcard上的名字
MediaStore.Video.Media.DURATION,//时间,单位毫秒
MediaStore.Video.Media.SIZE,//大小bytes
MediaStore.Video.Media.DATA,//绝对路径
MediaStore.Video.Media.ARTIST//艺术家

};
// int max = 1024 * 1024 * 1000;//视频大小的上限
int min = 1024 * 1024 * 5;//视频下限
// String selection=MediaStore.Video.Media.SIZE+">?";//限制条件
String selection = "select _size from audio where _size> ? ";
ContentResolver videoRes = getContentResolver(); //实例化ContentREsolver类
Cursor cursor = videoRes.query(contentUri, projection, selection, new String[]{String.valueOf(min)}, null);//通过查询路径为uri的数据库的数据获取数据集的指针
if (cursor != null) {
while (cursor.moveToNext()) {
MediaItem item = new MediaItem();
String name = cursor.getString(0);//名字
item.setName(name);
long duration = cursor.getLong(1);//时长
item.setDuration(duration);
long size = cursor.getLong(2);//大小
item.setSize(size);
String data = cursor.getString(3);
item.setData(data);
//将对象加入到ArrayList中
mediaItems.add(item);

}
//发送消息更新
handler.sendEmptyMessage(0);
}
cursor.close();
}
}.start();


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
MediaItem mediaItem=mediaItems.get(position);
Intent intent = new Intent(context,VideoListActivity.class);
intent.setDataAndType(Uri.parse(mediaItem.getData()),"video/*");
startActivity(intent);

}
});

}
}






下面是适配器代码

public class VideoAdapter extends BaseAdapter {

private Context context;
private final ArrayList<MediaItem> mediaItems;


public VideoAdapter(Context context,ArrayList<MediaItem> mediaItems) {
this.context = context;
this.mediaItems = mediaItems;
}

@Override
public int getCount() {
return mediaItems.size();
}

@Override
public Object getItem(int i) {
return null;
}

@Override
public long getItemId(int i) {
return 0;
}


@Override
public View getView(int position, View view, ViewGroup viewGroup) {

ViewHolder holder;
if (view == null) {
view = View.inflate(context, R.layout.video_list_item, null);
holder = new ViewHolder();
holder.video_name = (TextView) view.findViewById(R.id.video_name);
holder.video_time = (TextView) view.findViewById(R.id.video_time);
holder.video_size = (TextView) view.findViewById(R.id.video_size);
view.setTag(holder);
} else {
holder = (ViewHolder) view.getTag();
}

//根据位置的数据
MediaItem mediaItem = mediaItems.get(position);
holder.video_name.setText(mediaItem.getName().toString());
String time = dateChange(mediaItem.getDuration());
holder.video_time.setText(time);
holder.video_size.setText(Formatter.formatFileSize(context,mediaItem.getSize()));
return view;
}

//毫秒转化为分秒
public String dateChange(long duration) {
String date;
int minute = (int) (duration / (1000 * 60));
int second = (int) ((duration - minute * 1000 * 60) / 1000);
if (second < 10) {
date = minute + ":0" + second;
} else {
date = minute + ":" + second;
}
return date;
}
static class ViewHolder {
TextView video_name, video_size, video_time;
}


}
实在是揪心,先谢谢了。
...全文
119 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
浅小易 2017-10-24
  • 打赏
  • 举报
回复
其实当时想的是获取一下上下文直接封装来下context,其实直接用activity.this就行了,只是没有这么好看而已
hacker_crazy 2017-10-24
  • 打赏
  • 举报
回复
public VideoListActivity(Context context)是构造方法,这个属于java基础,默认加载java类的时候必然存在的方法,为什么会报错?你现在只是看到它的存在了,如果删除,它也会被编辑器默认创建的,只是看到或者看不到的问题罢了。

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧