Я делаю приложение, которое имеет 2 класса java: MainActivity
и SecondActivity
. MainActivity
инициирует SecondActivity
с использованием метода onClick
.Исключительный массив андроида исключений
SecondActivity
имеет 2 массива, хранящихся в файле strings.xml. Класс 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 Процесс: com.android.ict.seneca.androidpocketguide, PID: 26183 java.lang.RuntimeException: Невозможно создать экземпляр активности ComponentInfo {com.android.ict.seneca.androidpocketguide/com.android.ict.seneca.androidpocketguide.SecondActivity} : java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.content.res.Resources android.content.Context.getResources()' на ссылке нулевого объекта на android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2327) на android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:2476) на android.app.ActivityThread.-wrap11 (ActivityThread.java) на android.app.ActivityThread $ H.handleMessage (ActivityThread.java:1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java:5417) at java.lang.reflect.Method.invoke (собственный метод) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main (ZygoteInit .java: 616) Вызвано: java.lang.NullPointerException: попытка вызвать виртуальный метод 'android.content.res.Resources android.content.Context.getResources()' на ссылке нулевого объекта на android.content.ContextWrap per.getResources (ContextWrapper.java:87) на android.view.ContextThemeWrapper.getResources (ContextThemeWrapper.java:81) на com.android.ict.seneca.androidpocketguide.SecondActivity. (SecondActivity.java:22) на java .lang.Class.newInstance (собственный метод) at android.app.Instrumentation.newActivity (Instrumentation.java:1067) at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:2317) на android.app.ActivityThread. handleLaunchActivity (ActivityThread.java:2476) at android.app.ActivityThread.-wrap11 (ActivityThread.java) at и roid.app.ActivityThread $ H.handleMessage (ActivityThread.java: 1344) на android.os.Handler.dispatchMessage (Handler.java:102) на android.os.Looper.loop (Looper.java:148) на android.app.ActivityThread.main (ActivityThread.java: 5417) at java.lang.reflect.Method.invoke (собственный метод) 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>
Он не может найти контекст, для которого вы использовали getResources(). String [] Vocabularies = getResources(). GetStringArray (R.array.Vocabularies_array); String [] meanings = getResources(). GetStringArray (R.array.meanings_array); Нарисуйте эту деталь под oncreate, просто объявите ее глобально. Контекст AS не инициализирован –
Эти ответы, безусловно, помогли, моя ошибка была исправлена. Большое спасибо парни/девушки :) –