gpt4 book ai didi

java - android数组空指针异常

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:41 25 4
gpt4 key购买 nike

我正在制作一个具有 2 个 java 类的应用程序:MainActivitySecondActivityMainActivity 使用 onClick 方法启动 SecondActivity

SecondActivity 在 strings.xml 文件中存储了 2 个数组。 SecondActivity 类想要将 strings.xml 中的所有数组变量存储到其自身,以便将其用于某些方法。我认为我这样做的方式是错误的,因为我尝试将数组直接存储在 SecondActivity 中并且它有效,但是当我将数组存储在 strings.xml 中时,它给出了 NullPointerException

这是SecondActivity代码:

package com.android.ict.seneca.androidpocketguide;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class SecondActivity extends Activity {

private final String CLASS_NAME = "SecondActivity";

String [] Vocabularies = getResources().getStringArray(R.array.Vocabularies_array);
String [] meanings = getResources().getStringArray(R.array.meanings_array);

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

ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line, Vocabularies);

//ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, meanings);

AutoCompleteTextView textView =
(AutoCompleteTextView) findViewById(R.id.vocabularies);

textView.setThreshold(2); // minimum number of characters to be typed

textView.setAdapter(adapter); // connect the list of suggestions to the View object

}

public void onStart(){
super.onStart();
Log.d( CLASS_NAME, "onStart invoked!" );
}

public void onPause(){
super.onPause();
Log.d( CLASS_NAME, "onPause invoked!!" );
}

public void onResume(){
super.onResume();
Log.d( CLASS_NAME, "onResume invoked!!" );
}

public void onStop(){
super.onStop();
Log.d( CLASS_NAME, "onStop invoked!!!" );
}

public void onDestroy(){
super.onDestroy();
Log.d( CLASS_NAME, "onDestroy INVOKED!!!" );
}

public void onRestart(){
super.onRestart();
Log.d( CLASS_NAME, "onRestart invoked!!" );
}

// event handler for the button
public void onClick(View view) {


Intent data = new Intent();

EditText usr =
(EditText) findViewById(R.id.vocabularies); // get user input

// set the data part (an URI reference) of an intent
data.setData(Uri.parse(usr.getText().toString()));
String s = data.getData().toString();

int flag = 0;

for(int i=0; i<Vocabularies.length;i++)
{
if(s.equals(Vocabularies[i]))
{
flag = i;
}
}

Toast.makeText(this, "YOU'VE ENTERED: " + s, Toast.LENGTH_LONG ).show();

String m = meanings[flag];
String disp = "Vocabulary: " + s + "\n" + "Meaning: " + m;

TextView textViewObj1 = (TextView) findViewById(R.id.meaning);
textViewObj1.setText(disp);

//finish(); //--- close the activity AND RETURN CONTROL TO THE REQUESTING ACTIVITY


//EditText txt_username = (EditText) findViewById(R.id.txt_username);
} // end onClick
}

这是MainActivity代码:

package com.android.ict.seneca.androidpocketguide;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
private final String CLASS_NAME = "FirstActiviy";
private int request_Code = 1;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d( CLASS_NAME, "onCreate invoked!" );
}

public void onStart(){
super.onStart();
Log.d( CLASS_NAME, "onStart invoked!" );
}

public void onPause(){
super.onPause();
Log.d( CLASS_NAME, "onPause invoked!!" );
}

public void onResume(){
super.onResume();
Log.d( CLASS_NAME, "onResume invoked!!" );
}

public void onStop(){
super.onStop();
Log.d( CLASS_NAME, "onStop invoked!!!" );
}

public void onDestroy(){
super.onDestroy();
Log.d( CLASS_NAME, "onDestroy INVOKED!!!" );
}

public void onRestart(){
super.onRestart();
Log.d( CLASS_NAME, "onRestart invoked!!" );
}


// event handler for the button (activity 2)
public void onClick(View view) {

startActivityForResult( new Intent(
"com.android.ict.seneca.androidpocketguide.second"), // declared by an intent filter
request_Code); // (requesting) activity ID

Log.d( CLASS_NAME, "after startActivityForResult" );
//intent.setData(Uri.parse("com.seneca.lab2b.abbas"));
//startActivity(intent);
}

/*
public void onActivityResult( int requestCode, // used to match the REQUESTING activity ID
int resultCode, // result code set by the sender (i.e. the TARGET activity)
Intent data ) // an intent passed by the sender (i.e. the TARGET activity)
{
if (requestCode == request_Code) {
if (resultCode == RESULT_OK) {


//TextToSpeech(data.getData().toString());

Intent intent = getIntent();

String s = data.getData().toString();

TextView textViewObj1 = (TextView) findViewById(R.id.line);
textViewObj1.setText(s);


Toast.makeText(
this,
"MESSAGE RECEIVED: " + s, // retrieve data from the intent
// API Question: What is the return type of getData()?
Toast.LENGTH_LONG ).show();
}
}
Log.d( CLASS_NAME, "onActivityResult: what is next?" );
}


// event handler for a button (activity 3)
public void onClick3(View view) {

Intent dataIntent = new Intent( this, ThirdActivity.class );//"com.seneca.lab2b.third"); // explicit intent

// the putExtra( ) method
dataIntent.putExtra( "greeting", "Good morning Android!" );
dataIntent.putExtra( "number", 123 );

// create a Bundle object
Bundle bundle = new Bundle();
bundle.putString( "My name", "Abbas Zoeb" );
bundle.putInt( "Student ID", 56789 );

// putExtras( ): store the bundle in the intent
dataIntent.putExtras( bundle );

// launch the third activity
startActivity( dataIntent );

//startActivity( new Intent( this, ThirdActivity.class ) );

}
*/

}

这是错误日志:

09-21 23:43:19.907 26183-26183/com.android.ict.seneca.androidpocketguide E/AndroidRuntime: FATAL EXCEPTION: main Process: com.android.ict.seneca.androidpocketguide, PID: 26183 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.android.ict.seneca.androidpocketguide/com.android.ict.seneca.androidpocketguide.SecondActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference at android.content.ContextWrapper.getResources(ContextWrapper.java:87) at android.view.ContextThemeWrapper.getResources(ContextThemeWrapper.java:81) at com.android.ict.seneca.androidpocketguide.SecondActivity.(SecondActivity.java:22) at java.lang.Class.newInstance(Native Method) at android.app.Instrumentation.newActivity(Instrumentation.java:1067) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2317) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  at android.app.ActivityThread.-wrap11(ActivityThread.java)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loop(Looper.java:148)  at android.app.ActivityThread.main(ActivityThread.java:5417)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

这是 string.xml 文件:

<resources>
<string name="app_name">Android Pocket Guide</string>
<string-array name="Vocabularies_array">
<item>activity</item>
<item>AVD</item>
<item>ART</item>
<item>Dalvik</item>
<item>intent</item>
<item>intent filter</item>
<item>explicit intent</item>
<item>implicit intent</item>
<item>LogCat</item>
<item>bundle</item>
<item>Gradle</item>
<item>Android Device Monitor</item>
<item>SDK manager</item>
<item>minSdkVersion</item>
</string-array>

<string-array name="meanings_array">
<item>An activity represents a single screen with a user interface just like window or frame of Java</item>
<item>An Android Virtual Device (AVD) is an emulator configuration that lets you model an actual device by defining hardware and software options to be emulated by the Android Emulator.</item>
<item>Android Runtime (ART) is an application runtime environment used by the Android operating system.</item>
<item>Dalvik is a part of the software stack that makes up the Android platform.</item>
<item>Intent can be defined as a simple message objects which is used to communicate from 1 activity to another.</item>
<item>Specifies the types of intents that an activity, service, or broadcast receiver can respond to</item>
<item>An explicit intent is one that you use to launch a specific app component, such as a particular activity or service in your app</item>
<item>Implicit intents do not name a specific component, but instead declare a general action to perform, which allows a component from another app to handle it.</item>
<item>Logcat is a command-line tool that dumps a log of system messages, including stack traces when the device throws an error and messages that you have written from your app with the Log class.</item>
<item>A Bundle is a set of key/value pairs, where it implements an interface called Parcelable.</item>
<item>Gradle is a custom build tool used to build android packages (apk files) by managing dependencies and providing custom build logic.</item>
<item>Android Device Monitor is a standalone tool that provides a UI for several Android application debugging and analysis tools.</item>
<item>A software development kit that enables developers to create applications for the Android platform.</item>
<item>An integer designating the minimum API Level required for the application to run.</item>
</string-array>


</resources>

最佳答案

试试这个方法

 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Vocabularies = getResources().getStringArray(R.array.Vocabularies_array);
meanings = getResources().getStringArray(R.array.meanings_array);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line, Vocabularies);

//ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, meanings);

AutoCompleteTextView textView =
(AutoCompleteTextView) findViewById(R.id.vocabularies);

textView.setThreshold(2); // minimum number of characters to be typed

textView.setAdapter(adapter); // connect the list of suggestions to the View object

}

关于java - android数组空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39629987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com