마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

버튼 클릭시 파일목록 listview로 뿌리는 과정입니다ㅠㅠ

0 추천
package com.example.portablemusicstudio;

import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.os.Bundle;
import android.os.Environment;

public class FileListActivity extends Activity {

// Debugging
    private static final String TAG = "FileListActivity";
    private static final boolean D = true;
    
//ListView 선언
ListView filelist;

// 데이터를 연결할 Adapter
DataAdapter adapter;
// 데이터를 담을 자료구조
ArrayList<CData> alist;

//file경로
    public static final String STRSAVEPATH = Environment.
            getExternalStorageDirectory()+"/3D ensemble studio/record_Drum/";
    
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Setup the window
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.file_list);

//
//sdcard에 특정 위치에 파일 이름을 텍스트로 리스트뷰에 뿌리기
// 
//리스트 뷰 정의
filelist = (ListView)findViewById(android.R.id.list);

// 객체를 생성합니다
        alist = new ArrayList<CData>(); 
        
        // 데이터를 받기위해 데이터어댑터 객체 선언
        adapter = new DataAdapter(this, alist);
        
        

        //리스트를 아답터에 셋팅하여 화면에 뿌리기 
try{
File fp = new File(STRSAVEPATH);

//해당 경로를 설정 후 저장된 파일 배열로 불러오기
File[] listFiles = fp.listFiles();

for(int i=0; i< listFiles.length; i++){
if(!listFiles[i].isHidden()&&listFiles[i].isFile()){
adapter.add(new CData(getApplicationContext(), listFiles[i].getName(), 0, R.drawable.ic_launcher));
System.out.println(listFiles[i].getName());
}
}
} catch( Exception e ){
return;
}//end catch()

////////////////여기서 죽음
Log.d(TAG, "---------------------------- 죽음선 ---------------------------");

filelist.setAdapter(adapter);
adapter.notifyDataSetChanged();



} 

private class DataAdapter extends ArrayAdapter<CData> {
// 레이아웃 XML을 읽어들이기 위한 객체
private LayoutInflater mInflater;

public DataAdapter(Context context, ArrayList<CData> object) {

// 상위 클래스의 초기화 과정
// context, 0, 자료구조
super(context, 0, object);
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

// 보여지는 스타일을 자신이 만든 xml로 보이기 위한 구문
@Override
public View getView(int position, View v, ViewGroup parent) {
View view = null;

// 현재 리스트의 하나의 항목에 보일 컨트롤 얻기

if (v == null) {

// XML 레이아웃을 직접 읽어서 리스트뷰에 넣음
view = mInflater.inflate(R.layout.myitem, null);
} else {

view = v;
}

// 자료를 받는다.
final CData data = this.getItem(position);

if (data != null) {
// 화면 출력
TextView tv = (TextView) view.findViewById(R.id.textView1);
TextView tv2 = (TextView) view.findViewById(R.id.textView2);
// 텍스트뷰1에 getLabel()을 출력 즉 첫번째 인수값
tv.setText(data.getLabel());
tv.setTextSize(30);
tv.setTextColor(Color.BLACK);
// 텍스트뷰2에 getData()을 출력 즉 두번째 인수값
tv2.setTextSize(0);

ImageView iv = (ImageView) view.findViewById(R.id.imageView1);

//System.out.println(temp_position);
// 이미지뷰에 뿌려질 해당 이미지값을 연결 즉 세번째 인수값
iv.setImageResource(data.getData2());

}

return view;

}

}

// CData안에 받은 값을 직접 할당

class CData {

private String m_szLabel;
private int m_szData;
private int m_szData2;

public CData(Context context, String p_szLabel, int p_szDataFile,
int p_szData2) {

m_szLabel = p_szLabel;

m_szData = p_szDataFile;

m_szData2 = p_szData2;

}

public String getLabel() {
return m_szLabel;
}

public int getData() {
return m_szData;
}

public int getData2() {
return m_szData2;
}
}
}

 

 
 
자꾸 
////////////////여기서 죽음
Log.d(TAG, "---------------------------- 죽음선 ---------------------------");
 
filelist.setAdapter(adapter);       <-이놈때문에 죽는데 이유를 모르겠네요ㅠㅠ
 
도와주세요
 
로그켓 에러는 첫 댓글에 달겠습니다
 
 
 
 
CSP_lab (390 포인트) 님이 2015년 4월 1일 질문
CSP_lab님이 2015년 4월 1일 수정
04-01 16:27:23.590: E/AndroidRuntime(5627): FATAL EXCEPTION: main
04-01 16:27:23.590: E/AndroidRuntime(5627): Process: com.example.portablemusicstudio, PID: 5627
04-01 16:27:23.590: E/AndroidRuntime(5627): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.portablemusicstudio/com.example.portablemusicstudio.FileListActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2725)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread.access$900(ActivityThread.java:172)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.os.Handler.dispatchMessage(Handler.java:102)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.os.Looper.loop(Looper.java:145)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread.main(ActivityThread.java:5834)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at java.lang.reflect.Method.invoke(Native Method)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at java.lang.reflect.Method.invoke(Method.java:372)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
04-01 16:27:23.590: E/AndroidRuntime(5627): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
04-01 16:27:23.590: E/AndroidRuntime(5627):  at com.example.portablemusicstudio.FileListActivity.onCreate(FileListActivity.java:80)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.Activity.performCreate(Activity.java:6221)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
04-01 16:27:23.590: E/AndroidRuntime(5627):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2611)
04-01 16:27:23.590: E/AndroidRuntime(5627):  ... 10 more
감사합니다ㅎㅎ 수정하였습니다

1개의 답변

0 추천
 
채택된 답변
Log.i(getPackageName(), filelist != null ? "listview is not null!" : "listview is null!");

아마 리스트뷰를 못 찾은 것 같네요.

 

소스를 올리실 때는 들여쓰기를 잘해주는게 답을 듣는 가장 좋은 방법입니다. 

쎄미 (162,410 포인트) 님이 2015년 4월 1일 답변
CSP_lab님이 2015년 4월 1일 채택됨
정말 감사합니다... ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 제 자신이 너무 바보같네요ㅋㅋㅋㅋㅋㅋ
XML에 id를 file_list로 선언해놓고 android....list를 불러오고 2시간을 고민했다니ㅠㅠ 무튼 참 감사합니다
...