저는 Java에서 녹슬었고 Android에 익숙하지 않아서 MainActivity 클래스에 모두 포함되어 있으면 완벽하게 작동하는 코드를 조합했습니다. 하지만 이제는 코드를보기 좋게 만들기 위해 함수를 정리하여 클래스에 넣기를 원합니다. 다음은 내가하려는 일의 예입니다. IDE에서 오류가 발생하지는 않지만 MainActivity가 setArtist 및 setAlbum 함수를 실행하려고하면 장치가 충돌합니다.Android의 새로운 클래스에 문제가 있습니다.
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);
}
});
}
}
그리고 heres는 클래스 클래스 난에 문제가 ...가 오전
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);
}
}
LogCat 오류를 보내주세요. –
ViewFiller가 MainActivity를 확장하는 이유는 무엇입니까? 이 프로그램의 목적을 말씀해 주시겠습니까? – ujvl
음악 플레이어를 만드는 것은 앨범과 아티스트 이름으로 ListView를로드하는 코드입니다. MainActivity를 확장 한 이유를 알지 못했습니다. 정의되지 않은 ContentResolver와 관련된 오류를 없애는 유일한 방법이었습니다. – Xearo