Java RuntimeExpection无法实例化活动
我是一个android的初学者,所以请忍受我知识的缺乏 我正在处理一个项目,该项目一直运行良好,在进行了一些小的更改之后,它开始给我一个Java RuntimeExpection无法实例化活动,java,android,nullpointerexception,Java,Android,Nullpointerexception,我是一个android的初学者,所以请忍受我知识的缺乏 我正在处理一个项目,该项目一直运行良好,在进行了一些小的更改之后,它开始给我一个运行时异常,无法实例化活动组件信息{com.id11298775.exercise5/com.id11298775.exercise5.MainActivity}:java.lang.NullPointerException。我已经恢复了适配器中的小更改,但仍然无法运行应用程序。 这是我的日志: 很长一段时间以来,我一直试图找出我的主要活动有什么问题,但对我来
运行时异常,无法实例化活动组件信息{com.id11298775.exercise5/com.id11298775.exercise5.MainActivity}:java.lang.NullPointerException
。我已经恢复了适配器中的小更改,但仍然无法运行应用程序。
这是我的日志:
很长一段时间以来,我一直试图找出我的主要活动有什么问题,但对我来说,一切似乎都很好,所以我想我错过了一些东西
这是我的main活动
课程:
package com.id11298775.exercise5;
// import statements are here
public class MainActivity extends Activity {
private final String URI = getString(R.string.URI);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// get the subject name
EditText subjectName = (EditText) findViewById(R.id.activity_main_subjectname_et);
// associate editText with the context menu
subjectName.setOnCreateContextMenuListener(this);
}
/**
* Inflate the menu this adds items to the action bar
*/
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/**
* code that executes according to the menu item that is clicked
*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// click help
case R.id.help:
help();
return true;
// click exit
case R.id.exit:
finish();
default:
return super.onOptionsItemSelected(item);
}
}
/**
* when help is clicked this method will display a page related to the
* subject number that is entered If no subject name is entered display the
* general page of subjects of the handbook
*/
public void help() {
EditText subjectNumber = (EditText) findViewById(R.id.activity_main_subjectnumber_et);
String number = subjectNumber.getText().toString();
String url = URI + number;
Uri uriUrl = Uri.parse(url);
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
startActivity(launchBrowser);
}
/**
* Inflate the context menu
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
super.onCreateContextMenu(menu, v, menuInfo);
}
/**
* code that executes according to the context menu item that is selected
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
EditText nameEd = (EditText) findViewById(R.id.activity_main_subjectname_et);
switch (item.getItemId()) {
// capitalize is selected
case R.id.contextmenu_capitalize:
String subjectName = nameEd.getText().toString();
String upperCase = subjectName.toUpperCase();
nameEd.setText(upperCase);
return true;
// clear is selected
case R.id.contextmenu_clear:
nameEd.setText("");
return true;
default:
return super.onContextItemSelected(item);
}
}
/**
* methdo called when showList button is clicked
* @param v
*/
public void showListButtonClicked(View v) {
Intent intent = new Intent(MainActivity.this, SubjectList.class);
startActivity(intent);
}
}
这是我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.id11298775.exercise5"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="18" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.id11298775.exercise5.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.id11298775.exercise5.SubjectList"></activity>
</application>
</manifest>
有人愿意帮助我吗?
感谢您分享您的知识。这很可能是您的问题:
private final String URI = getString(R.string.URI);
保留声明,但将方法调用放在onCreate()中
private String uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uri = getString(R.string.URI);
}
我有一个适配器,我想访问适配器中的strings.xml文件。所以我发现我需要在适配器中作为参数传递上下文,我已经这样做了。然后应用程序开始中断,所以我恢复了更改。但该应用程序并没有从一开始就运行。我只在按下按钮formMain\u Activity
后才使用适配器。你说得对!它正在工作!你知道为什么它工作了一段时间,我在那里声明了URI
变量4/5天,然后它停止了吗?@mikey它不应该工作,不知道:)请接受答案。哦,好吧,thanx无论如何,我会尽快接受答案,因为错误是由getString()方法引起的,换句话说,在创建MainActivity之前,我无法调用它,对吗?我猜上下文
,即活动
尚未初始化,因为初始化字符串时尚未调用onCreate()
方法。请检查此问题: