简体   繁体   English

从TextView设置文本时Android应用程序崩溃

[英]Android app crashing when setting text from TextView

I've searched thoroughly through stackoverflow for a solution to my problem, however so I was unsuccessful so I must resort to asking the question myself. 我已经在stackoverflow中进行了彻底的搜索,以找到解决问题的方法,但是,由于未成功,所以我必须自己问问题。 My issues is that when I 我的问题是当我

Songname.setText(Fullname);

My app crashes. 我的应用崩溃了。 If I comment out the code then the app does not crash. 如果我注释掉代码,则该应用程序不会崩溃。 My Fullname variable is 我的全名变量是

Fullname = (artist + ":" + album + ":" + track);

which comes from a BroadcastReceiver: 来自BroadcastReceiver:

    private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        String cmd = intent.getStringExtra("command");
        Log.v("tag ", action + " / " + cmd);
        String artist = intent.getStringExtra("artist");
        String album = intent.getStringExtra("album");
        String track = intent.getStringExtra("track");
        Log.v("tag", artist + ":" + album + ":" + track);
        Fullname = (artist + ":" + album + ":" + track);
        Toast.makeText(MusicPlayer.this, track, Toast.LENGTH_SHORT).show();
        update();

    }
};

(I think) I have my TextView set up correctly so I doubt that is the issue but I'll post it just in case: (我认为)我的TextView设置正确,所以我怀疑这是问题所在,但为防万一,我将其发布:

TextView Songname;    
TextView Songname = (TextView) findViewById(R.id.musictitle);

Here is the entire xml just in case that is the issue: 这是整个xml,以防万一是问题所在:

<?xml version="1.0" encoding="utf-8"?>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/musictitle"
    android:layout_marginTop="46dp"
    android:ellipsize="marquee"
    android:scrollHorizontally="true"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true" />

<Button
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_alignBottom="@+id/imageView"
    android:layout_toLeftOf="@+id/imageView"
    android:layout_marginRight="25dp" />

<Button
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="New Button"
    android:id="@+id/button2"
    android:layout_alignTop="@+id/button"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="35dp" />

<Button
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="New Button"
    android:id="@+id/button3"
    android:layout_alignTop="@+id/textView7"
    android:layout_toLeftOf="@+id/textView7" />

<Button
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:text="New Button"
    android:id="@+id/button4"
    android:layout_alignTop="@+id/textView7"
    android:layout_toRightOf="@+id/seekBar" />

<TextView
    android:layout_width="50dp"
    android:layout_height="50dp"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="0"
    android:id="@+id/textView7"
    android:gravity="center"
    android:layout_gravity="center"
    android:layout_alignBottom="@+id/imageView"
    android:layout_toLeftOf="@+id/button4" />

<SeekBar
    android:layout_width="500dp"
    android:layout_height="wrap_content"
    android:id="@+id/seekBar"
    android:indeterminate="false"
    android:layout_below="@+id/musictitle"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp" />

<ImageView
    android:layout_width="180dp"
    android:layout_height="180dp"
    android:id="@+id/imageView"
    android:layout_below="@+id/seekBar"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="24dp" />

and the class file if that is the issue: 和类文件,如果那是问题:

package com.androidddev101.ep8;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import android.content.IntentFilter;
import android.widget.TextView;
import android.widget.Toast;


public class MusicPlayer extends Activity implements View.OnClickListener {

    public static final String SERVICECMD = "com.android.music.musicservicecommand";
    String Fullname;
String artist, album, track;
TextView Songname;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.musicplayer);


    TextView Songname = (TextView) findViewById(R.id.musictitle);

    IntentFilter iF = new IntentFilter();
    iF.addAction("com.android.music.metachanged");
    iF.addAction("com.android.music.playstatechanged");
    iF.addAction("com.android.music.playbackcomplete");
    iF.addAction("com.android.music.queuechanged");
    iF.addAction("com.htc.music.metachanged");
    iF.addAction("fm.last.android.metachanged");
    iF.addAction("com.sec.android.app.music.metachanged");
    iF.addAction("com.nullsoft.winamp.metachanged");
    iF.addAction("com.amazon.mp3.metachanged");
    iF.addAction("com.miui.player.metachanged");
    iF.addAction("com.real.IMP.metachanged");
    iF.addAction("com.sonyericsson.music.metachanged");
    iF.addAction("com.rdio.android.metachanged");
    iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
    iF.addAction("com.andrew.apollo.metachanged");
    iF.addAction("com.jrtstudio.AnotherMusicPlayer.metachanged");


    registerReceiver(mReceiver, iF);
}




private BroadcastReceiver mReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        String cmd = intent.getStringExtra("command");
        Log.v("tag ", action + " / " + cmd);
        String artist = intent.getStringExtra("artist");
        String album = intent.getStringExtra("album");
        String track = intent.getStringExtra("track");
        Log.v("tag", artist + ":" + album + ":" + track);
        Fullname = (artist + ":" + album + ":" + track);
        Toast.makeText(MusicPlayer.this, track, Toast.LENGTH_SHORT).show();
        update();

    }
};

public void update() {
    {
       // Fullname = (artist + ":" + album + ":" + track);
        Log.v("tag", Fullname + "123");
        Songname.setText(Fullname);
        Songname.setSelected(true);
        Songname.setEllipsize(TextUtils.TruncateAt.MARQUEE);
        Songname.setSingleLine(true);
    }
}

@Override
public void onClick(View v) {

}

} }

Note: The toast message works and gives me the the track name 注意:祝酒消息有效,并为我提供了曲目名称

Here is the error from Logcat 这是Logcat的错误

Caused by: java.lang.NullPointerException at com.androidddev101.ep8.MusicPlayer.update(MusicPlayer.java:81) at com.androidddev101.ep8.MusicPlayer$1.onReceive(MusicPlayer.java:72) 引起原因:com.androidddev101.ep8.MusicPlayer.update(MusicPlayer.java:81)处的com.androidddev101.ep8.MusicPlayer $ 1.onReceive(MusicPlayer.java:72)处的java.lang.NullPointerException

Thank you for any assistance possible. 多谢您的协助。

TextView Songname; // not instantiated for global use
TextView Songname = (TextView) findViewById(R.id.musictitle); // instantiated in only oncreate

change it to this 改成这个

TextView Songname;    
Songname = (TextView) findViewById(R.id.musictitle);

The reference of Songname is local to onCreate, you don't need to declare another variable called Songname. Songname的引用是onCreate的本地引用,您无需声明另一个名为Songname的变量。

package com.androidddev101.ep8;


import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;

import android.content.IntentFilter;
import android.widget.TextView;
import android.widget.Toast;


    public class MusicPlayer extends Activity implements View.OnClickListener {

      public static final String SERVICECMD = "com.android.music.musicservicecommand";
      String Fullname;
      String artist, album, track;
      TextView Songname;

      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.musicplayer);


        Songname = (TextView) findViewById(R.id.musictitle);

        IntentFilter iF = new IntentFilter();
        iF.addAction("com.android.music.metachanged");
        iF.addAction("com.android.music.playstatechanged");
        iF.addAction("com.android.music.playbackcomplete");
        iF.addAction("com.android.music.queuechanged");
        iF.addAction("com.htc.music.metachanged");
        iF.addAction("fm.last.android.metachanged");
        iF.addAction("com.sec.android.app.music.metachanged");
        iF.addAction("com.nullsoft.winamp.metachanged");
        iF.addAction("com.amazon.mp3.metachanged");
        iF.addAction("com.miui.player.metachanged");
        iF.addAction("com.real.IMP.metachanged");
        iF.addAction("com.sonyericsson.music.metachanged");
        iF.addAction("com.rdio.android.metachanged");
        iF.addAction("com.samsung.sec.android.MusicPlayer.metachanged");
        iF.addAction("com.andrew.apollo.metachanged");
        iF.addAction("com.jrtstudio.AnotherMusicPlayer.metachanged");


        registerReceiver(mReceiver, iF);
    }


    private BroadcastReceiver mReceiver = new BroadcastReceiver() {

      @Override
      public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        String cmd = intent.getStringExtra("command");
        Log.v("tag ", action + " / " + cmd);
        String artist = intent.getStringExtra("artist");
        String album = intent.getStringExtra("album");
        String track = intent.getStringExtra("track");
        Log.v("tag", artist + ":" + album + ":" + track);
        Fullname = (artist + ":" + album + ":" + track);
        Toast.makeText(MusicPlayer.this, track, Toast.LENGTH_SHORT).show();
        update();

       }
      };

      public void update() {
        {
          // Fullname = (artist + ":" + album + ":" + track);
          Log.v("tag", Fullname + "123");
          Songname.setText(Fullname);
          Songname.setSelected(true);
          Songname.setEllipsize(TextUtils.TruncateAt.MARQUEE);
          Songname.setSingleLine(true);
        }
      }

      @Override
      public void onClick(View v) {

      }
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在 android 工作室中将文本设置为 textview 时应用程序崩溃 - App crashes when setting text to a textview in android studio Android Studio Java 应用程序在尝试更新 TextView 时崩溃 - Android Studio Java app crashing when trying to update TextView 在Android中的TextView上设置文本时出错 - Error setting text on TextView in Android Android TextView设置文本和颜色 - Android TextView setting text and color 设置文本时TextView崩溃 - TextView Crashes When Setting Text 设置TextView的文本时发生NullPointerException - NullPointerException when setting text of TextView 自定义TextView字体不适用于从java android设置文本 - Custom TextView font not applied on setting text from java android Android Studio - 当 TextView 位于自定义 xml 文件时尝试使用代码更改它的属性时,应用程序崩溃 - Android Studio - App crashing when trying to change a TextView properties with code when it's located at a custom xml file 尝试在动态添加到布局的Fragment中设置TextView时,Android应用程序崩溃 - Android app crashing when trying to set TextView in a Fragment that is dynamically added to a layout 尝试覆盖其他类的TextView中的文本时,Android应用程序崩溃 - Android app crash when try to overwrite text in a TextView from other class
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM