每次加载时我的应用程序都会停止

阿姆扎雷斯库·劳伦蒂(Amzarescu Laurentiu)

编辑新年快乐!确切地说,我在Android Studio中创建了一个简单的音乐应用,可以从内部存储中读取mp3文件。一切都好,直到我决定在列表上的每条单曲上放一张随机图像。(在歌曲名称的前面,我想显示一幅图像。)当我在ImageView的“ src”中选择一幅图像时,它可以工作并出现在所有歌曲中。我将在下面介绍我的代码的一部分:主要活动:

package com.alg.amzar.spectrum;

import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Random;


public class MainActivity extends AppCompatActivity {

static {
    System.loadLibrary("native-lib");
}
private ArrayList<Song> songList;
private ListView songView;


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

    schimbare();

    songView = (ListView)findViewById(R.id.song_list);
    songList = new ArrayList<Song>();

    getSongList();

    Collections.sort(songList, new Comparator<Song>(){
        public int compare(Song a, Song b){
            return a.getTitle().compareTo(b.getTitle());
        }
    });

    SongAdapter songAdt = new SongAdapter(this, songList);
    songView.setAdapter(songAdt);


}

public void schimbare() {
    int[] photos={R.drawable.img_0, R.drawable.img_1,R.drawable.img_2};

    ImageView image = (ImageView) findViewById(R.id.imagine);

    Random ran=new Random();
    int i=ran.nextInt(photos.length);
    image.setImageResource(photos[i]);
}

public void getSongList() {
    ContentResolver musicResolver = getContentResolver();
    Uri musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);

    if(musicCursor!=null && musicCursor.moveToFirst()){
        //get columns
        int titleColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media.TITLE);
        int idColumn = musicCursor.getColumnIndex
                (android.provider.MediaStore.Audio.Media._ID);
        //add songs to list
        do {
            long thisId = musicCursor.getLong(idColumn);
            String thisTitle = musicCursor.getString(titleColumn);
            songList.add(new Song(thisId, thisTitle));
        }
        while (musicCursor.moveToNext());
    }
}

public native String stringFromJNI();
}

活动主.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="#FF330000"
tools:context=".MainActivity" >

<ListView
    android:id="@+id/song_list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content">
</ListView>

</LinearLayout>

Song.xml:

<LinearLayout 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="fill_parent"
android:layout_height="wrap_content"
android:onClick="songPicked"
android:orientation="vertical"
android:padding="5dp" >

<ImageView
    android:layout_width="70dp"
    android:id="@+id/imagine"
    android:layout_height="50dp" />

<TextView
    android:id="@+id/song_title"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="#FFFFFF99"
    android:textSize="15sp"
    android:textStyle="bold"
    android:layout_marginBottom="20dp"
    android:layout_marginLeft="75dp"
    android:layout_marginTop="-42dp"/>


</LinearLayout>

除此之外,我还有2个Java类。我认为问题出在这里,但是idk出了什么问题:

public void schimbare() {
    int[] photos={R.drawable.img_0, R.drawable.img_1,R.drawable.img_2};

    ImageView image = (ImageView) findViewById(R.id.imagine);

    Random ran=new Random();
    int i=ran.nextInt(photos.length);
    image.setImageResource(photos[i]);
}

我的另一个疑问是,何时使用.getDrawable时“不赞成使用”是什么意思。提前致谢!

Logcat:

ime: FATAL EXCEPTION: main
                                                                    Process: com.alg.amzar.spectrum, PID: 28677
                                                                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.alg.amzar.spectrum/com.alg.amzar.spectrum.MainActivity}: java.lang.NullPointerException
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2381)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2433)
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:155)
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346)
                                                                        at android.os.Handler.dispatchMessage(Handler.java:110)
                                                                        at android.os.Looper.loop(Looper.java:193)
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5341)
                                                                        at java.lang.reflect.Method.invokeNative(Native Method)
                                                                        at java.lang.reflect.Method.invoke(Method.java:515)
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830)
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646)
                                                                        at dalvik.system.NativeStart.main(Native Method)
                                                                     Caused by: java.lang.NullPointerException
                                                                        at com.alg.amzar.spectrum.MainActivity.schimbare(MainActivity.java:57)
                                                                        at com.alg.amzar.spectrum.MainActivity.onCreate(MainActivity.java:31)
                                                                        at android.app.Activity.performCreate(Activity.java:5343)
                                                                        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
                                                                        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2335)
                                                                        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2433) 
                                                                        at android.app.ActivityThread.access$800(ActivityThread.java:155) 
                                                                        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1346) 
                                                                        at android.os.Handler.dispatchMessage(Handler.java:110) 
                                                                        at android.os.Looper.loop(Looper.java:193) 
                                                                        at android.app.ActivityThread.main(ActivityThread.java:5341) 
                                                                        at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                        at java.lang.reflect.Method.invoke(Method.java:515) 
                                                                        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:830) 
                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:646) 
                                                                        at dalvik.system.NativeStart.main(Native Method) 

我的手机的android版本:4.4.2(API 19)目标SDK版本:“ 19” MinSDK版本:“ 14”

SongAdapter.java:

package com.alg.amzar.spectrum;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;



public class SongAdapter extends BaseAdapter {

private ArrayList<Song> songs;
private LayoutInflater songInf;

public SongAdapter(Context c, ArrayList<Song> theSongs) {
    songs = theSongs;
    songInf = LayoutInflater.from(c);
}

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

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //map to song layout
    LinearLayout songLay = (LinearLayout)songInf.inflate
            (R.layout.song, parent, false);
    //get title and artist views
    TextView songView = (TextView)songLay.findViewById(R.id.song_title);
    //get song using position
    Song currSong = songs.get(position);
    //get title and artist strings
    songView.setText(currSong.getTitle());
    //set position as tag
    songLay.setTag(position);
    return songLay;
}

}
罗汉

在您的情况下,findViewById(R.id.imagine)返回NULL,因为它在您提供的布局“ activity_main”中不存在setContentView()findViewById()如果视图在当前布局中不存在,则返回NULL。R.id.imagine存在于布局song.xml中。

我认为,您正在尝试使用布局“歌曲”为ListView充气。只有充气后,您才能致电findViewByIdsetImageResource膨胀之后,您可以在SongAdapter类中为ListView中的每个元素完成此操作。

另一个建议是,可以使用MediaMetadataRetriever类来获取歌曲的专辑封面,而不是使用随机图像。您可以参考android文档。但是您必须先解决此异常。

注释/删除功能schimbare()onCreate和编辑SongAdapter如下所示。

package com.alg.amzar.spectrum;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;



public class SongAdapter extends BaseAdapter {

private ArrayList<Song> songs;
private LayoutInflater songInf;

int[] photos={R.drawable.img_0, R.drawable.img_1,R.drawable.img_2};
Random ran=new Random();
// CHECK THIS:
public SongAdapter(Context c, ArrayList<Song> theSongs) {
    songs = theSongs;
    // CHECK THIS:
    songInf =  ( LayoutInflater )c.
                 getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

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

@Override
public Object getItem(int arg0) {
    // TODO Auto-generated method stub
    return null;
}

@Override
public long getItemId(int arg0) {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //map to song layout
    LinearLayout songLay = (LinearLayout)songInf.inflate
            (R.layout.song, null);
    //get title and artist views
    TextView songView = (TextView)songLay.findViewById(R.id.song_title);
    // CHECK THIS:
    ImageView img = (ImageView)songLay.findViewById(R.id.imagine);
    //get song using position
    Song currSong = songs.get(position);
    //get title and artist strings
    songView.setText(currSong.getTitle());
    // CHECK THIS:
    int i=ran.nextInt(photos.length);
    img.setImageResource(photos[i]);
    //set position as tag
    songLay.setTag(position);
    return songLay;
}

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

每次我检查FacebookDialog.canPresentShareDialog时,应用程序都会冻结

来自分类Dev

每次我开始上一个活动时,Android 应用程序都会崩溃

来自分类Dev

为什么每次更改启动画面时我的应用程序都会从后台打开?

来自分类Dev

每次我关闭Chrome时,外部鼠标都会停止响应

来自分类Dev

一旦我在STPAddCardViewController()上选择完成,应用程序就会加载并且不会停止加载

来自分类Dev

每当我按下“后退”按钮时,应用都会停止

来自分类Dev

加载活动时应用程序停止

来自分类Dev

每次我尝试使用“应用程序存储库...”安装某些软件包时都会出错

来自分类Dev

onBackPressed()是否会停止应用程序?

来自分类Dev

onBackPressed()是否会停止应用程序?

来自分类Dev

每次我们在主屏幕上单击一个应用程序图标时,都会启动一个应用程序启动屏幕

来自分类Dev

每次重新启动应用程序时,Spring Integration都会加载文件

来自分类Dev

每次重新启动应用程序时,Spring Integration都会加载文件

来自分类Dev

Rails应用程序上的Highcharts每次加载都会渲染两次

来自分类Dev

每次运行我的应用程序时,都会创建Android数据库吗

来自分类Dev

为什么我的应用程序(使用Google Maps API 2)每次都会崩溃?

来自分类Dev

每次我尝试打开 Heroku 应用程序时都会崩溃

来自分类Dev

每次屏幕打开时都会重新创建应用程序类

来自分类Dev

每次登录用户时都会调用一个应用程序

来自分类Dev

每当我杀死应用程序时,IntentService就会停止

来自分类Dev

只要我选择一个单选按钮,应用程序就会停止工作

来自分类Dev

每当我杀死应用程序时,IntentService就会停止

来自分类Dev

为什么在提示文字时C#控制台应用程序会停止运行?

来自分类Dev

添加firebase_database独立性时,Flutter应用程序不会停止安装

来自分类Dev

为什么在提示文字时C#控制台应用程序会停止运行?

来自分类Dev

Install4j - 关闭 MacOS X 时应用程序不会停止

来自分类Dev

每当我每次运行时尝试在应用程序中进行gmail登录集成时,都会显示相同的错误

来自分类Dev

每当我每次运行时尝试在应用程序中进行gmail登录集成时,都会显示相同的错误

来自分类Dev

bash fork错误(资源暂时不可用)不会停止,并且每次我尝试终止/重新引导时都会不断显示

Related 相关文章

  1. 1

    每次我检查FacebookDialog.canPresentShareDialog时,应用程序都会冻结

  2. 2

    每次我开始上一个活动时,Android 应用程序都会崩溃

  3. 3

    为什么每次更改启动画面时我的应用程序都会从后台打开?

  4. 4

    每次我关闭Chrome时,外部鼠标都会停止响应

  5. 5

    一旦我在STPAddCardViewController()上选择完成,应用程序就会加载并且不会停止加载

  6. 6

    每当我按下“后退”按钮时,应用都会停止

  7. 7

    加载活动时应用程序停止

  8. 8

    每次我尝试使用“应用程序存储库...”安装某些软件包时都会出错

  9. 9

    onBackPressed()是否会停止应用程序?

  10. 10

    onBackPressed()是否会停止应用程序?

  11. 11

    每次我们在主屏幕上单击一个应用程序图标时,都会启动一个应用程序启动屏幕

  12. 12

    每次重新启动应用程序时,Spring Integration都会加载文件

  13. 13

    每次重新启动应用程序时,Spring Integration都会加载文件

  14. 14

    Rails应用程序上的Highcharts每次加载都会渲染两次

  15. 15

    每次运行我的应用程序时,都会创建Android数据库吗

  16. 16

    为什么我的应用程序(使用Google Maps API 2)每次都会崩溃?

  17. 17

    每次我尝试打开 Heroku 应用程序时都会崩溃

  18. 18

    每次屏幕打开时都会重新创建应用程序类

  19. 19

    每次登录用户时都会调用一个应用程序

  20. 20

    每当我杀死应用程序时,IntentService就会停止

  21. 21

    只要我选择一个单选按钮,应用程序就会停止工作

  22. 22

    每当我杀死应用程序时,IntentService就会停止

  23. 23

    为什么在提示文字时C#控制台应用程序会停止运行?

  24. 24

    添加firebase_database独立性时,Flutter应用程序不会停止安装

  25. 25

    为什么在提示文字时C#控制台应用程序会停止运行?

  26. 26

    Install4j - 关闭 MacOS X 时应用程序不会停止

  27. 27

    每当我每次运行时尝试在应用程序中进行gmail登录集成时,都会显示相同的错误

  28. 28

    每当我每次运行时尝试在应用程序中进行gmail登录集成时,都会显示相同的错误

  29. 29

    bash fork错误(资源暂时不可用)不会停止,并且每次我尝试终止/重新引导时都会不断显示

热门标签

归档