Java Android中的新类有问题吗

Java Android中的新类有问题吗,java,android,class,this,Java,Android,Class,This,我对Java非常生疏,而且我是Android新手,我编写了一些代码,当它们都在MainActivity类中时,这些代码工作得非常好。但是现在我想清理这些函数,并将它们放在它们自己的类中,以使代码看起来更漂亮。下面是我正在尝试做的一个例子。我在IDE中没有收到任何错误,但是我的设备在MainActivity尝试运行setArtist和setAlbum函数的第二天崩溃 public class MainActivity extends Activity { private ListView lv;

我对Java非常生疏,而且我是Android新手,我编写了一些代码,当它们都在MainActivity类中时,这些代码工作得非常好。但是现在我想清理这些函数,并将它们放在它们自己的类中,以使代码看起来更漂亮。下面是我正在尝试做的一个例子。我在IDE中没有收到任何错误,但是我的设备在MainActivity尝试运行setArtist和setAlbum函数的第二天崩溃

public class MainActivity extends Activity {

private ListView lv;
String path, selectedFromList;
ArrayAdapter<String> adapter;
public ViewFiller k = new ViewFiller();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    lv = (ListView) findViewById(R.id.listView1);

    k.setArtist();
    k.setAlbums();

    adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, k.getAlbums());
    lv.setAdapter(adapter);

    ImageButton albumButton = (ImageButton) findViewById(R.id.albumButton);
    ImageButton artistButton = (ImageButton) findViewById(R.id.artistButton);

    albumButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            k.album(lv, adapter);
        }
    });

    artistButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            k.artist(lv, adapter);
        }
    });

}
公共类MainActivity扩展活动{
私有ListView lv;
字符串路径,从列表中选择;
阵列适配器;
public ViewFiller k=new ViewFiller();
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView)findViewById(R.id.listView1);
k、 setArtist();
k、 setAlbums();
adapter=newarrayadapter(这个,android.R.layout.simple_list_item_1,k.getAlbums());
低压设置适配器(适配器);
ImageButton albumButton=(ImageButton)findViewById(R.id.albumButton);
ImageButton artistButton=(ImageButton)findViewById(R.id.artistButton);
albumButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
k、 相册(lv、适配器);
}
});
artistButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
k、 艺术家(lv、适配器);
}
});
}
}

这是我遇到麻烦的班级

public class ViewFiller extends MainActivity  {

public ViewFiller(){
    }

ArrayList<String> Albums = new ArrayList<String>();
ArrayList<String> Artist = new ArrayList<String>();
LinkedHashSet<String> hs = new LinkedHashSet<String>();

public ArrayList<String> getAlbums() {
    return Albums;
}

public void setAlbums() {

    String selection = AudioColumns.IS_MUSIC + " != 0";
    String[] projection = { BaseColumns._ID, AudioColumns.ALBUM };
    Cursor c = this.getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,
            selection, null, null);

    while (c.moveToNext()) {
        Albums.add(c.getString(1));
    }
    hs.clear();
    hs.addAll(Albums);
    Albums.clear();
    Albums.addAll(hs);
}


public ArrayList<String> getArtist() {
    return Artist;
}

public void setArtist() {

    String selection = AudioColumns.IS_MUSIC + " != 0";
    String[] projection = { BaseColumns._ID, AudioColumns.ARTIST, };
    Cursor c = this.getContentResolver().query(
            MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection,
            selection, null, null);

    while (c.moveToNext()) {
        Artist.add(c.getString(1));
    }

    hs.clear();
    hs.addAll(Artist);
    Artist.clear();
    Artist.addAll(hs);
}

public void artist(ListView lv, ArrayAdapter<String> s) {
    lv.setAdapter(null);
    s = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, Artist);
    lv.setAdapter(s);
}

public void album(ListView lv, ArrayAdapter<String> s) {
    lv.setAdapter(null);
    s = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, Albums);
    lv.setAdapter(s);

}
public类ViewFiller扩展了main活动{
公共视图填充器(){
}
ArrayList Albums=新的ArrayList();
ArrayList艺术家=新建ArrayList();
LinkedHashSet hs=新LinkedHashSet();
公共阵列列表getAlbums(){
归还相册;
}
公共相册(){
字符串选择=AudioColumns.IS_MUSIC+“!=0”;
String[]projection={BaseColumns.\u ID,AudioColumns.ALBUM};
游标c=this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL\u内容\u URI,投影,
选择,空,空);
while(c.moveToNext()){
添加(c.getString(1));
}
hs.clear();
hs.addAll(相册);
相册;
相册。添加全部(hs);
}
公共阵列列表getArtist(){
回归艺术家;
}
公共艺术家(){
字符串选择=AudioColumns.IS_MUSIC+“!=0”;
字符串[]投影={BaseColumns.\u ID,AudioColumns.ARTIST,};
游标c=this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL\u内容\u URI,投影,
选择,空,空);
while(c.moveToNext()){
艺术家添加(c.getString(1));
}
hs.clear();
hs.addAll(艺术家);
艺术家:clear();
艺术家addAll(hs);
}
公共虚空艺术家(ListView lv,ArrayAdapter s){
lv.setAdapter(空);
s=新阵列适配器(此,
android.R.layout.simple_list_item_1,艺术家);
低压设置适配器;
}
公共作废相册(ListView lv、ArrayAdapter s){
lv.setAdapter(空);
s=新阵列适配器(此,
android.R.layout.simple_list_item_1,相册);
低压设置适配器;
}

}我认为您不希望ViewFiller成为一项活动。。。但我可能错了。如果它只是一个常规类,您正在使用它来创建主活动使用的某些对象,并且您需要访问主活动,那么只需将上下文传递到对象的构造函数中即可

编辑:

试试这样,我对Android也有点生疏,所以我不确定它是否能工作(对不起,我可能完全错了):

而且。。。而不是
this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL\u内容\u URI,投影,
选择,空,空),

尝试:

activity.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL\u CONTENT\u URI,投影,选择,null,null)

在您的主要活动中:
ViewFiller k=newviewfiller(这个)


然而,我不确定这是否是你想要的。因此,如果我在某个地方出错,我深表歉意。

请告诉我们LogCat错误。为什么ViewFiller正在扩展活动?你能说说这个程序的目的吗?制作一个音乐播放器,这是一段代码,它将加载一个带有唱片集和艺术家姓名的列表视图。我真的不知道为什么我让它扩展MainActivity,这是唯一一种消除涉及ContentResolver未定义的错误的方法。如果您想从ViewFiller对MainActivity执行某些操作,请不要扩展MainActivity。尝试在构造函数中传递活动。耶!谢谢你的帮助。
Activity activity;
public ViewFiller(Activity activity){
     this.activity = activity;
}