【问题标题】:Java file returning NullPointerException返回 NullPointerException 的 Java 文件
【发布时间】:2015-03-03 17:04:32
【问题描述】:

我正在尝试制作一个简单的活动来显示用户的高分。它不是一个列表,它只有一个高分。每当我在 mainActivity 中单击“查看您的记录”时,应用程序就会崩溃,并且 logcat 会这样说:

java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2229)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2359)
at android.app.ActivityThread.access$700(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5455)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.Activity.findViewById(Activity.java:1914)
at haveabeer.two.padc.haveabeer.Records.<init>(Records.java:18)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1130)
at android.app.Instrumentation.newActivity(Instrumentation.java:1078)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2220)

我可以非常清楚地看到错误发生在 Records.java 18 的中途。问题是这样的,Java 18 是一个 textView。我已经尝试了几个小时来解决这个问题,但无处可去。这是课程 Records.java

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;

import android.widget.TextView;
import android.widget.Toast;

public class Records extends MainActivity {
TextView daily_record = (TextView) findViewById(R.id.daily_textview);
TextView weekly_record = (TextView) findViewById(R.id.weekly_textview);
public int default_int_day = 0;
public int default_int_week = 0;
static boolean daily_recieved = false;
static boolean weekly_recieved = false;


@Override
public void onCreate(Bundle savedInstanceState) {



super.onCreate(savedInstanceState);
setContentView(R.layout.personal_records);

SharedPreferences sharedPrefs = getSharedPreferences("Data", Context.MODE_PRIVATE);

int Daily_Record_Option = sharedPrefs.getInt("daily", counter);
int Weekly_Record_Option = sharedPrefs.getInt("weekly", counter_weekly);
if(isSavedDaily){
if(Daily_Record_Option > default_int_day){
daily_record.setText(Daily_Record_Option);
default_int_day = Daily_Record_Option;
daily_recieved = true;
}else if(default_int_day > Daily_Record_Option){
daily_record.setText(default_int_day);
daily_recieved = false;
}else{
daily_record.setText("No records yet!");
}

}else{
Toast.makeText(this, "No daily data saved yet", Toast.LENGTH_LONG).show();
}
if(isSavedWeekly){
if(Weekly_Record_Option > default_int_week){
weekly_record.setText(Weekly_Record_Option);
default_int_week = Weekly_Record_Option;
weekly_recieved = true;
} else if(default_int_week > Weekly_Record_Option){
weekly_record.setText(default_int_week);
weekly_recieved = false;
}
}else{
Toast.makeText(this, "No  weekly data saved yet", Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.records_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.Back){
Intent records_intent = new Intent(this, MainActivity.class);
startActivity(records_intent);
return true;
}
return super.onOptionsItemSelected(item);
}
}

以及附加的布局文件: personal_records.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"
android:background="#FF8B00"
android:id="@+id/Personal_Records">
 <TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/Your_Records"
android:id="@+id/textView5"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_margin="40dp"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/Weekly_Record"
android:id="@+id/textView6"
android:layout_below="@+id/textView5"
android:layout_alignLeft="@+id/textView5"
android:layout_alignStart="@+id/textView5"
android:layout_marginBottom="20dp" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/weekly_textview"
android:layout_below="@+id/textView6"
android:layout_alignLeft="@+id/textView6"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_alignStart="@+id/textView6"
android:gravity="center_horizontal"
android:text=""/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/Daily_Record"
android:id="@+id/textView7"
android:layout_below="@+id/weekly_textview"
android:layout_alignLeft="@+id/textView5"
android:layout_alignStart="@+id/textView5"
android:layout_marginBottom="20dp"
android:paddingTop="20dp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/daily_textview"
android:layout_below="@+id/textView7"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_alignLeft="@+id/textView6"
android:layout_alignStart="@+id/textView6"
android:text=" "
android:gravity="center_horizontal"/>
</RelativeLayout>

我不确定 textView 是如何返回 null 的,尤其是考虑到它是在常规活动中而不是 Fragment 中。感谢所有帮助!

【问题讨论】:

  • JavaScript 与 Java 无关。

标签: java android xml error-handling


【解决方案1】:
TextView daily_record = (TextView) findViewById(R.id.daily_textview);
TextView weekly_record = (TextView) findViewById(R.id.weekly_textview);

您希望在setContentView 之后的onCreate 方法中初始化您的TextView。在调用 onCreatesetContentView 之前,您需要找到的视图不会被初始化。

【讨论】:

  • 不可能,一定是这样,否则我会得到空值
  • @LeonardoFerrari 好的,谢谢。我不完全确定,但我想这很明显:P
  • 没问题!只是为了把事情弄清楚。想象一下人们对它的投入并为之疯狂。
【解决方案2】:

你需要在setContentView之后在onCreate方法中初始化两个textview。

TextView daily_record = (TextView) findViewById(R.id.daily_textview);
TextView weekly_record = (TextView) findViewById(R.id.weekly_textview);

【讨论】:

    【解决方案3】:

    在 setContentView(R.layout.personal_records) 之后查看初始化;因为Activity没有加载XML文件,所以找不到TextView

    【讨论】:

      【解决方案4】:

      首先你必须经历Activity生命周期,然后你只需要做android程序。在android生命周期中是重要的。你所有的UI渲染只发生在onCreate。所以,你有必须在 onCreate(Widget 初始化) 中初始化值。您的状态实例由onCreate setContentView(R.layout.activity_main) 处理。

      TextView daily_record = (TextView) findViewById(R.id.daily_textview);
      TextView weekly_record = (TextView) findViewById(R.id.weekly_textview);
      

      【讨论】:

        猜你喜欢
        • 2013-03-08
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多