java - 尝试在 Android Studio 中创建日志但应用程序崩溃
问题描述
在 Android Studio 中打开我的应用程序的第一个活动后,应用程序可以正常打开。我复制并粘贴了相同的主要活动代码以打开日志活动,并更改了所需的变量名称,但打开日志时应用程序崩溃。
这是打开日志的代码:
public class Activity2 extends AppCompatActivity {
private Button buttonJournal;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_2);
buttonJournal = (Button) findViewById(R.id.buttonJournal);
buttonJournal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openJournalActivity();
}
});
}
public void openJournalActivity () {
Intent intent = new Intent(this, JournalActivity.class);
startActivity(intent);
}
}
我正在开放的日志活动:(这可能是我的问题)
public class JournalActivity extends AppCompatActivity {
static ArrayList<String> notes = new ArrayList<>();
static ArrayAdapter arrayAdapter;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.add_note_menu, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
if(item.getItemId() == R.id.add_note){
Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
startActivity(intent);
return true;
}
return false;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_journal);
ListView listView = findViewById(R.id.listView);
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.anxty", Context.MODE_PRIVATE);
HashSet<String> set = (HashSet<String>) sharedPreferences.getStringSet("notes", null);
if(set == null) {
notes.add("Example note");
} else{
notes = new ArrayList(set);
}
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, notes);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getApplicationContext(), NoteEditorActivity.class);
intent.putExtra("noteId",i);
startActivity(intent);
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
final int itemToDelete = i;
new AlertDialog.Builder(getApplicationContext())
.setIcon(android.R.drawable.ic_dialog_alert)
.setTitle("Are you sure?")
.setMessage("Do you want to delete this note")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int i) {
notes.remove(itemToDelete);
arrayAdapter.notifyDataSetChanged();
SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences("com.example.anxty", Context.MODE_PRIVATE);
HashSet<String> set = new HashSet(JournalActivity.notes);
sharedPreferences.edit().putStringSet("notes",set).apply();
}
})
.setNegativeButton("No", null)
.show();
return true;
}
});
}
}
应用程序崩溃时的 LogCat:
-06-11 11:55:55.744 6677-6677/com.example.anxty E/AndroidRuntime:致命异常:主进程:com.example.anxty,PID:6677 java.lang.RuntimeException:无法启动活动 ComponentInfo{com .example.anxty/com.example.anxty.JournalActivity}:java.lang.NullPointerException:尝试在 android 的空对象引用上调用虚拟方法 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)'。 app.ActivityThread.performLaunchActivity(ActivityThread.java:2327) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) 在 android.app.ActivityThread.access$800(ActivityThread.java:153) 在 android.app.ActivityThread$ H.handleMessage(ActivityThread.java:1305) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5293) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com .android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 原因:java.lang.NullPointerException:尝试调用在 com.example.anxty.JournalActivity.onCreate(JournalActivity.java:79) 在 android.app.Activity.performCreate( Activity.java:5990) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2280) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2392) 在 android.app.ActivityThread.access$800(ActivityThread.java:153) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305)在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5293) 在 java.lang。 reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) at com. android.internal.os.ZygoteInit.main(ZygoteInit.java:698)在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) 在 android.os.Looper.loop( Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5293) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect.Method.invoke(Method.java: 372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1305) 在 android.os.Looper.loop( Looper.java:135) 在 android.app.ActivityThread.main(ActivityThread.java:5293) 在 java.lang.reflect.Method.invoke(Native Method) 在 java.lang.reflect.Method.invoke(Method.java: 372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)main(ActivityThread.java:5293) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$ MethodAndArgsCaller.run(ZygoteInit.java:903) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
显现:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:dist="http://schemas.android.com/apk/distribution"
package="com.example.anxty">
<dist:module dist:instant="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/anxty_logo"
android:label="@string/app_name"
android:roundIcon="@mipmap/anxty_logo"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".NoteEditorActivity"></activity>
<activity android:name=".JournalActivity" />
<activity
android:name=".ui.login.LoginActivity"
android:label="@string/title_activity_login" />
<activity
android:name=".Activity2"
android:label="@string/title_activity_2"
android:theme="@style/AppTheme.NoActionBar" /> <!-- Main Activity -->
<activity
android:name=".MainActivity"
android:screenOrientation="portrait" /> <!-- Splash Screen Activity -->
<activity
android:name=".SplashScreen"
android:noHistory="true"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
解决方案
推荐阅读
- php - HTML DOM 用点替换逗号
- c++ - 我在地图 C++ 中遇到了 count() 的意外行为
- python - 如何使用python烧瓶从firebase auth注销/注销
- spring-boot - 如何使用 schema-h2.sql
- python - 当我使用 SMTP 尝试发送电子邮件时,为什么我的代码返回错误
- sql - 用于对数据库表中的实际数据进行排序的 SQL
- ubuntu - ubuntu 服务器上的 Netplan 和 DHCP 热点:租约在哪里?
- prestashop - 在 PrestaShop 1.7 中使用脚本而不是管理面板启用“维护模式”?
- emacs - 使用 EDIFF 时如何处理这种合并冲突情况,我们需要来自变体 A 和 B 的部分冲突
- python - 用不同的相机校准相机