홈>
저는 Java의 초보자이며 Android Studio를 사용하고 있습니다. 설치 후 내 앱이 시작되지 않습니다. 소스 코드와 XML을 확인하면 오류가없는 것 같습니다. 아래 코드를 확인하도록 도와주세요
MainActivity.java
public class MainActivity extends AppCompatActivity {
ArrayList<File> list;
GridView gridView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView)findViewById(R.id.image_grid);
list = imageReader(Environment.getExternalStorageDirectory());
gridView.setAdapter(new gridAdapter());
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(MainActivity.this, FullImageActivity.class);
intent.putExtra("img", list.get(i).toString());
startActivity(intent);
}
});
}
public class gridAdapter extends BaseAdapter{
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
View convertView = null;
if (convertView == null) {
convertView = getLayoutInflater().inflate(R.layout.row_layout, viewGroup, false);
ImageView myImage = (ImageView) convertView.findViewById(R.id.my_image);
myImage.setImageURI(Uri.parse(list.get(i).toString()));
}
return convertView;
}
}
private ArrayList<File> imageReader(File externalStorageDirectory) {
ArrayList<File> b = new ArrayList<>();
File[] files = externalStorageDirectory.listFiles();
for (int i =0; i<files.length; i++){
if (files[i].isDirectory()){
b.addAll(imageReader(files[i]));
}else {
if (files[i].getName().endsWith(".jpg")) {
b.add(files[i]);
}
}
}
return b;
}
}
이것은 activity_main.xml입니다
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<GridView
android:id="@+id/image_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="auto_fit"
android:columnWidth="100dp"
android:verticalSpacing="100dp"
android:horizontalSpacing="10dp"
android:stretchMode="spacingWidthUniform" />
</RelativeLayout>
FullImageActivity.java입니다
public class FullImageActivity extends AppCompatActivity {
ImageView fullImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_image);
fullImage = (ImageView)findViewById(R.id.full_image);
String data = getIntent().getExtras().getString("img");
fullImage.setImageURI(Uri.parse(data));
}
}
activity_full_image.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".FullImageActivity">
<ImageView
android:id="@+id/full_image"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/wp"
/>
</RelativeLayout>
row_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/my_image"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/wp"
/>
</RelativeLayout>
나의 깊숙이 먹는 질문에 참석하면 기쁘다.
이것은 LOGCAT입니다
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference
at com.jkjworks.galleryextra.FullImageActivity.onCreate(FullImageActivity.java:19)
at android.app.Activity.performCreate(Activity.java:7030
# 2 업데이트 매니페스트 및 BUILD.GRADLE
이것은 매니페스트입니다
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"/>
<activity android:name=".FullImageActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
이것은 APP 레벨 Build.gradle입니다
android {
compileSdkVersion 27
defaultConfig {
applicationId "com.domain.galleryextra"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
multiDexEnabled true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
//noinspection GradleCompatible
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
compile 'com.android.support:multidex:1.0.3'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
implementation 'com.google.android.gms:play-services-ads:12.0.1'
implementation 'com.android.support:support-vector-drawable:27.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
- 답변 # 1
관련 자료
- wix - 앱을 설치하고 시작한 후 애플리케이션이 항상 맨 위에 표시되지 않습니다
- flutter 실행이 'android sdk 빌드 도구 2803 설치 (수정 - 2803)'준비 중 멈춤
- certificates - 내 장치를 Android Enterprise에 등록하여 루트 CA를 설치할 수 있습니까?
- jekyll - 원격 서버에서 npm을 시작한 후 http - //examplecom:3000/을 방문 할 수 없습니다
- Android searchview는 검색 후 recyclerview에서 숨겨집니다
- ubuntu20.04 - systemd - 업데이트 제거 스냅 후 사용자 데몬이 시작되지 않음
- Dart 및 Kotlin 플러그인을 비활성화 한 후 Android 스튜디오가 실행되지 않음
- kotlin - MediaRecorder Android 11 시작 실패 -1004
- Android Studio에 Genymotion 플러그인을 설치하는 방법은 무엇입니까?
- 누락 된 gdb 용 디버그 정보 패키지를 설치 한 후에는 무엇을 다르게 할 수 있습니까?
- java - Android 스튜디오, 앱을 다시 연 후 Fileproperties가 삭제됨
- applications - Android에서 하나의 앱을 두 번 설치하는 쉽고 무료 방법
- centos - pg_basebackup (복제) 후 Postgresql 12를 시작할 수 없습니다
- javascript - 객체 초기화 후 setInterval을 시작하는 방법은 무엇입니까?
- c# - 일부 창에서 net 런타임을 설치 한 후 wpf 앱을 실행할 수 없습니다
- 빌드 후 Cordova Android 앱 강제 종료
- javascript - 입력을 시작한 후 API 만 렌더링 (Firebase)
- javascript - 반응시 페이지로드 후 애니메이션 시작
- boot - 2010으로 업그레이드 한 후 ubuntu가 시작되지 않음 - 'start-limit-hit'결과로 실패 함
- unity3d - 맨 앞으로 가져 오기 전에로드 할 두 번째 Android 활동을 백그라운드에서 시작합니다
관련 질문
- java : Android가 작동하지 않는 set/getTag()의 조건부 논리
- java : Android에서 json 데이터를 xml로 변환하는 방법은 무엇입니까?
- java : 편집 텍스트에 스크롤바를 추가하는 방법
- java : 화면이 잠겨 있거나 꺼져 있을 때 카메라 셔터 onkeyevent가 있는 Android 앱
- Google Map NearbySearch Api를 사용하여 개조 및 RxJava로 2개의 연속 요청을 실행할 수 없습니다. 내가 무엇을 놓치고 있습니까?
- java : Android 앱 -지도 조각에서 사라지는 Google 지도 위치 마커
- java : URI를 업데이트하려고 할 때 FileNotFoundException이 발생하는 ActivityResultContracts.TakePicture()
- java : android studio에서 SQLite 데이터가 지속되지 않음
- java : XML에서 하위 요소의 값을 가져오는 방법은 무엇입니까?
- java : Firebase 실시간 데이터베이스(android studio)를 읽거나 쓸 수 없습니다.
당신은
list.get(i)
를 확신합니까null
가 아닙니다 ? 중단 점을 넣고list.get(i)
의 반환 값을 분석합니다. 전달하는 것이 유효한 데이터인지 확인하십시오.또한
intent.getStringExtra("img")
사용getIntent().getExtras().getString("img")
대신문제는 그
getIntent()
입니다NULL
를 받고있다 그리고 당신은 그것에 액세스하려고, 따라서NullPointerException
일어나기 위해.편집 (디버그 방법에 대한 빠른 분석) 가장 좋은 방법은 디버거를 통해 코드를 단계별로 실행하는 것입니다. 이 작업을 수행하지 않은 경우 실제로 수행하기가 매우 쉽고 문제가 무엇인지 확인할 수 있습니다.
MainActivity
에서 이것을 바꾸십시오 :이렇게하면 좀 더 쉽게 디버깅 할 수 있습니다 :
참고 : 코드 디버깅에 익숙하지 않다면 몇 분 동안이 기사를 읽는 것이 좋습니다. 제 생각에는 프로그래머가 가지고있는 가장 귀중한 도구입니다. Android Studio에서 디버깅하는 방법을 알아 보려면 여기를 클릭하십시오
왼쪽의 빨간색 원은 중단 점이며, 코드는 여기서 실행을 중지하고 위의 스크린 샷에서 볼 수 있듯이 각 변수를 분석 할 수 있습니다. 앱이 실행 중이고 중단 점이 실행을 일시 중지 한 상태에서도 "표현식 평가"를 수행 할 수 있습니다. 그렇게하면 메모리에있는 모든 객체를 잡고 테스트 할 수 있습니다.
예를 들어 위에서 설정 한 중단 점으로 "디버그"탭에있는 "표현식 평가"버튼을 사용할 수 있습니다 :
AndroidStudio 디버거를 사용하는 방법에 대한 기사에서 표현식을 평가하는 방법에 대한 간단한 스크린 샷입니다 (여기에서 전체 안내서) :
<시간>업데이트 # 2
참고 : API 23 이상을 사용하는 경우 다음을 확인해야합니다. Android 기기에서 읽기/쓰기 권한이 있습니다.
당신의AndroidManifest.xml
에서Manifest
내부 태그 포함 :여기에 프로젝트에서 사용하는 솔루션이 있는데, 특히 여러 권한을 요청하려는 경우 특히 효과적입니다.