java - 我的应用程序崩溃了,不知道为什么

标签 java android

好吧,我正在按照 mybringback 的教程进行操作,在使用位图设置背景图像时出现错误,所以我查看了此处,并使用了某人给出的代码,发现我没有错误,因此我运行该应用程序,当我选择时崩溃的图像 这是我的 Activity :

package com.odysseus.thebasics;

import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.app.WallpaperManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class TutorialThree extends Activity implements OnClickListener {

    MediaPlayer buttonSound;
    ImageView display;
    int toPhone;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.wallpaper);
        final MediaPlayer buttonSound = MediaPlayer.create(TutorialThree.this, R.raw.button_sound);

        toPhone = R.drawable.image1;

        display = (ImageView) findViewById(R.id.IVdisplay);
        ImageView image1 = (ImageView) findViewById(R.id.IVimage1);
        ImageView image2 = (ImageView) findViewById(R.id.IVimage2);
        ImageView image3 = (ImageView) findViewById(R.id.IVimage3);
        ImageView image4 = (ImageView) findViewById(R.id.IVimage4);
        Button setWall = (Button) findViewById(R.id.setBackround);

        image1.setOnClickListener(this);
        image2.setOnClickListener(this);
        image3.setOnClickListener(this);
        image4.setOnClickListener(this);
        setWall.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()){
        case R.id.IVimage1:
            display.setImageResource(R.drawable.image5);
            toPhone = R.drawable.image1;
            break;
        case R.id.IVimage2:
            display.setImageResource(R.drawable.image2);
            toPhone = R.drawable.image2;
            break;
        case R.id.IVimage3:
            display.setImageResource(R.drawable.image3);
            toPhone = R.drawable.image3;
            break;
        case R.id.IVimage4:
            display.setImageResource(R.drawable.image4);
            toPhone = R.drawable.image4;
            break;
        case R.id.setBackround:
            InputStream decode = getResources().openRawResource(toPhone);
            Bitmap background = BitmapFactory.decodeStream(decode); //this before was InputStream ....
        WallpaperManagermyWallpaperManager=WallpaperManager.getInstance(getApplicationContext()); //error used to be here before i had getApplicationContext().setWallpaper(background);
            try{
                myWallpaperManager.setBitmap(background);
            }catch(IOException e){
                e.printStackTrace();
                Toast error = Toast.makeText(TutorialThree.this, "Oops, couldn't set image", Toast.LENGTH_LONG);
                error.show();
            }
            break;
        }
        buttonSound.start();
    }
}

这是我的 xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/IVdisplay"
        android:layout_width="200dp"
        android:layout_height="159dp"
        android:layout_gravity="center"
        android:src="@drawable/image5" />

    <Button
        android:id="@+id/setBackround"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Set Image To Background" />

    <HorizontalScrollView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="25dp"
            android:orientation="horizontal" >

            <ImageView
                android:id="@+id/IVimage1"
                android:layout_width="125dp"
                android:layout_height="200dp"
                android:padding="15dp"
                android:src="@drawable/image5" />

            <ImageView
                android:id="@+id/IVimage2"
                android:layout_width="125dp"
                android:layout_height="200dp"
                android:padding="15dp"
                android:src="@drawable/image2" />

            <ImageView
                android:id="@+id/IVimage3"
                android:layout_width="125dp"
                android:layout_height="200dp"
                android:padding="15dp"
                android:src="@drawable/image3" />

            <ImageView
                android:id="@+id/IVimage4"
                android:layout_width="125dp"
                android:layout_height="200dp"
                android:padding="15dp"
                android:src="@drawable/image4" />
        </LinearLayout>
    </HorizontalScrollView>

</LinearLayout>

我的日志猫:

01-09 20:03:03.960: V/MediaPlayer(29999): getDuration
01-09 20:03:03.960: V/MediaPlayer(29999): getCurrentPosition
01-09 20:03:03.970: D/MediaPlayer(29999): start() mUri is null
01-09 20:03:03.980: I/MediaPlayer(29999): mContext.toString() = com.odysseus.thebasics.menu@422c3b50
01-09 20:03:03.980: I/MediaPlayer(29999): setLGSoundNormalizerOnOff(1)
01-09 20:03:03.980: V/MediaPlayer(29999): start
01-09 20:03:04.020: V/MediaPlayer(29999): message received msg=4, ext1=0, ext2=0
01-09 20:03:04.020: V/MediaPlayer(29999): Received seek complete
01-09 20:03:04.020: V/MediaPlayer(29999): All seeks complete - return to regularly scheduled program
01-09 20:03:04.020: V/MediaPlayer(29999): callback application
01-09 20:03:04.020: V/MediaPlayer(29999): back from callback
01-09 20:03:04.040: V/MediaPlayer(29999): getDuration
01-09 20:03:04.040: V/MediaPlayer(29999): getCurrentPosition
01-09 20:03:04.040: V/MediaPlayer(29999): isPlaying: 1
01-09 20:03:04.590: V/MediaPlayer(29999): message received msg=2, ext1=0, ext2=0
01-09 20:03:04.590: V/MediaPlayer(29999): playback complete
01-09 20:03:04.590: V/MediaPlayer(29999): callback application
01-09 20:03:04.590: V/MediaPlayer(29999): back from callback
01-09 20:03:04.590: E/MediaPlayer(29999): ##### MEDIA_PLAYBACK_COMPLETE
01-09 20:03:04.590: V/MediaPlayer(29999): getDuration
01-09 20:03:04.590: V/MediaPlayer(29999): getCurrentPosition
01-09 20:03:04.590: D/MediaPlayer(29999): start() mUri is null
01-09 20:03:06.650: D/dalvikvm(29999): GC_CONCURRENT freed 76K, 5% free 6944K/7303K, paused 20ms+4ms, total 86ms
01-09 20:03:06.650: D/dalvikvm(29999): WAIT_FOR_CONCURRENT_GC blocked 45ms
01-09 20:03:06.750: D/dalvikvm(29999): GC_FOR_ALLOC freed 679K, 14% free 6646K/7687K, paused 23ms, total 23ms
01-09 20:03:06.820: D/dalvikvm(29999): GC_CONCURRENT freed 196K, 10% free 6931K/7687K, paused 21ms+2ms, total 58ms
01-09 20:03:06.820: D/dalvikvm(29999): WAIT_FOR_CONCURRENT_GC blocked 40ms
01-09 20:03:06.820: V/MediaPlayer(29999): constructor
01-09 20:03:06.820: V/MediaPlayer(29999): setListener
01-09 20:03:06.820: V/MediaPlayer(29999): setDataSource(51, 3706, 13890)
01-09 20:03:06.840: V/MediaPlayer(29999): setVideoSurfaceTexture
01-09 20:03:06.840: V/MediaPlayer(29999): prepare
01-09 20:03:06.840: V/MediaPlayer(29999): message received msg=200, ext1=1, ext2=9120
01-09 20:03:06.840: W/MediaPlayer(29999): info/warning (1, 9120)
01-09 20:03:06.840: V/MediaPlayer(29999): callback application
01-09 20:03:06.840: V/MediaPlayer(29999): back from callback
01-09 20:03:06.890: V/MediaPlayer(29999): message received msg=5, ext1=0, ext2=0
01-09 20:03:06.890: V/MediaPlayer(29999): New video size 0 x 0
01-09 20:03:06.890: V/MediaPlayer(29999): callback application
01-09 20:03:06.890: V/MediaPlayer(29999): back from callback
01-09 20:03:06.890: V/MediaPlayer(29999): message received msg=1, ext1=0, ext2=0
01-09 20:03:06.890: V/MediaPlayer(29999): prepared
01-09 20:03:06.890: V/MediaPlayer(29999): signal application thread
01-09 20:03:06.890: V/MediaPlayer(29999): prepare complete - status=0
01-09 20:03:06.900: V/MediaPlayer(29999): callback application
01-09 20:03:06.900: V/MediaPlayer(29999): back from callback
01-09 20:03:06.910: I/MediaPlayer(29999): Info (1,9120)
01-09 20:03:10.300: W/dalvikvm(29999): threadid=1: thread exiting with uncaught exception (group=0x41c2e438)
01-09 20:03:10.330: E/AndroidRuntime(29999): FATAL EXCEPTION: main
01-09 20:03:10.330: E/AndroidRuntime(29999): java.lang.NullPointerException
01-09 20:03:10.330: E/AndroidRuntime(29999):    at com.odysseus.thebasics.TutorialThree.onClick(TutorialThree.java:79)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.view.View.performClick(View.java:4101)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.view.View$PerformClick.run(View.java:17082)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.os.Handler.handleCallback(Handler.java:615)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.os.Handler.dispatchMessage(Handler.java:92)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.os.Looper.loop(Looper.java:137)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at android.app.ActivityThread.main(ActivityThread.java:4940)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at java.lang.reflect.Method.invokeNative(Native Method)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at java.lang.reflect.Method.invoke(Method.java:511)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
01-09 20:03:10.330: E/AndroidRuntime(29999):    at dalvik.system.NativeStart.main(Native Method)

你可以自己运行一下看看,我是android新手,所以请理解!提前致谢

最佳答案

MediaPlayer buttonSound; // already declared  but not initialized
ImageView display;
int toPhone;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.wallpaper);
    final MediaPlayer buttonSound = MediaPlayer.create(TutorialThree.this, R.raw.button_sound);
     // again declared and initialized. local to onCreate.   

更改为

buttonSound = MediaPlayer.create(TutorialThree.this, R.raw.button_sound);

这个

buttonSound.start(); 

可能是第 79 行 TutorialThree.java 导致 NUllPointerException

关于java - 我的应用程序崩溃了,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21028012/

相关文章:

java - JTable table.getSelectedRows() 问题

java - BUILD FAILED D :\opt\trunk\build. xml:117: 无法创建任务或类型:对于

android - WebView 显示某些链接的空白 View

android - 如何使用android创建一个新的页面/地方来签到?

android - 将 MultiPart 文件从 Android 上传到服务器(SpringMVC)

java - 如何循环直到用户输入有效整数?

java - 项目无法执行Findbugs : java. lang.ArrayIndexOutOfBoundsException

java - 这个程序的运行时复杂度是多少?(尤其是 retainAll() 方法)

android - 无法删除导致库版本冲突的外部库

android - Http 数据未显示在我的 TextView [android]