- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在处理的练习应用程序遇到问题。我正面临与 toString 方法相关的 NullPointerException 问题。作为 android 应用程序开发的新手,即使在我对此进行研究之后,我也不确定确切的原因。因此,我请求更熟悉堆栈跟踪的人帮助我。
注意:当我单击 ListView 条目以访问日记条目的编辑页面时,会发生错误。但是它似乎根本没有进入编辑页面。
您将在下面找到它发生的我的 Activity 代码和堆栈跟踪。
Activity 代码:
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.content.Intent;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import java.util.ArrayList;
public class ViewDiaryEntries extends AppCompatActivity {
// Database Helper
MyDBHandler db;
// Listview
ListView data_list;
// Test var
public final static String KEY_EXTRA_DATA_ID = "KEY_EXTRA_DATA_ID";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_diary_entries);
db = new MyDBHandler(this);
// Displays the database items.
displayItems();
}
// To display items in the listview.
public void displayItems(){
// To display items in a listview.
ArrayList db_data_list = db.getDiaryDBDataList();
ArrayAdapter listAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, db_data_list);
// Set the adapter for the listview
data_list = (ListView) findViewById(R.id.dataListView);
data_list.setAdapter(listAdapter);
/* Experiment -------------------------------------------------------------*/
data_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// Selected item store
String selectedEntry = ((TextView) view).getText().toString();
// Test for regular expression
String[] listViewItemSplit = selectedEntry.split(" - ");
String listViewItempt1 = listViewItemSplit[0]; // For date and time
//String listViewItempt2 = listViewItemSplit[1]; // For save file name
//Toast.makeText(ViewDiaryEntries.this, listViewItempt1, Toast.LENGTH_LONG).show();
if(listViewItempt1.equals("")){
Toast.makeText(ViewDiaryEntries.this, "Error. Unable to detect entry ID.", Toast.LENGTH_LONG).show();
}
else{
// Pass on the data:
Intent editEntry = new Intent(ViewDiaryEntries.this, editdiaryentry.class);
editEntry.putExtra(KEY_EXTRA_DATA_ID, listViewItempt1);
startActivity(editEntry);
}
}
});
}
// For the go back button.
public void viewdiarytoinitialdiary_backbutt(View v){
// Create and start new intent going back ot main page.
Intent main_page = new Intent(ViewDiaryEntries.this, User_Main_Menu_Options.class);
main_page.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(main_page);
}
// For the about button.
public void viewdiarypage_directionabout_butt(View v){
// Create an alert dialog
final AlertDialog.Builder about_page_dialog = new AlertDialog.Builder(ViewDiaryEntries.this);
about_page_dialog.setTitle("About This Page:");
// Inputs values for the dialog message.
final String dialog_message = "This page will show you any saved diary entries you've.\n\n To edit an entry, do the following: \n\n- Take note of the Entry ID# (first value on entry display) \n- Type it in the number box at the bottom. \n- Press Edit Record icon next to number box, and wait for it to load.";
about_page_dialog.setMessage(dialog_message);
about_page_dialog.setPositiveButton("Got it!", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// Closes the dialog.
dialog.cancel();
}
});
// Shows the dialog.
about_page_dialog.show();
}
// Main menu button.
public void viewDiaryEntriesMainMenushortcut_butt(View v){
// Creates main menu alert dialog.
AlertDialog.Builder mainMenu_Dialog = new AlertDialog.Builder(this);
mainMenu_Dialog.setIcon(R.drawable.main_menu_symbol);
mainMenu_Dialog.setTitle("Main Menu");
// Creates array adapter with items to fill the menu with.
final ArrayAdapter<String> menuItemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
menuItemsAdapter.add("Home Screen");
menuItemsAdapter.add("Diary");
menuItemsAdapter.add("Tests");
menuItemsAdapter.add("Activity");
menuItemsAdapter.add("Media");
menuItemsAdapter.add("Thought of the Day");
menuItemsAdapter.add("Inspirational Quotes");
menuItemsAdapter.add("Resources");
menuItemsAdapter.add("Settings");
// To close menu.
mainMenu_Dialog.setPositiveButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
// To go to appropriate page upon selection.
mainMenu_Dialog.setAdapter(menuItemsAdapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String selectedItem = menuItemsAdapter.getItem(which);
if(selectedItem.equals("Home Screen")){
// Goes to main menu.
Intent mainMenu = new Intent(ViewDiaryEntries.this, User_Main_Menu_Options.class);
mainMenu.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mainMenu);
}
else if(selectedItem.equals("Diary")){
// Goes to diary page.
Intent diaryPage = new Intent(ViewDiaryEntries.this, ViewDiaryEntries.class);
diaryPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(diaryPage);
}
else if(selectedItem.equals("Tests")){
// Goes to tests page.
Intent testsPage = new Intent(ViewDiaryEntries.this, TestChoices.class);
testsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(testsPage);
}
else if(selectedItem.equals("Media")){
// Goes to media page.
Intent mediaPage = new Intent(ViewDiaryEntries.this, initialMediaPage.class);
mediaPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(mediaPage);
}
else if(selectedItem.equals("Thought of the Day")){
// Goes to thought of the day page.
Intent thoughtofthedayPage = new Intent(ViewDiaryEntries.this, thoughtQuotes.class);
thoughtofthedayPage.putExtra("quote_or_thought", 2);
thoughtofthedayPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(thoughtofthedayPage);
}
else if(selectedItem.equals("Inspirational Quotes")){
// Goes to inspirational quotes page.
Intent inspirationalquotesPage = new Intent(ViewDiaryEntries.this, thoughtQuotes.class);
inspirationalquotesPage.putExtra("quote_or_thought", 1);
inspirationalquotesPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(inspirationalquotesPage);
}
else if(selectedItem.equals("Settings")){
// Goes to settings page.
Intent settingsPage = new Intent(ViewDiaryEntries.this, settings.class);
settingsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(settingsPage);
}
}
});
mainMenu_Dialog.show();
}
// For the settings button.
public void viewdiarypagelisttoSettings_butt(View v){
// Goes to settings page.
Intent settingsPage = new Intent(ViewDiaryEntries.this, settings.class);
settingsPage.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(settingsPage);
}
// For new entry.
public void viewdiarypageaddEntry_butt(View v){
// Opening up the diary add intent.
Intent newdiaryEntry = new Intent(ViewDiaryEntries.this, newdiaryentry.class);
startActivity(newdiaryEntry);
}
}
这是我看到的堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.lang.Object.toString()' on a null object reference
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:401)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:369)
at android.widget.AbsSpinner.onMeasure(AbsSpinner.java:194)
at android.widget.Spinner.onMeasure(Spinner.java:580)
at android.support.v7.widget.AppCompatSpinner.onMeasure(AppCompatSpinner.java:407)
at android.view.View.measure(View.java:18794)
at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:715)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:461)
at android.view.View.measure(View.java:18794)
at android.widget.ScrollView.measureChildWithMargins(ScrollView.java:1283)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.widget.ScrollView.onMeasure(ScrollView.java:340)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18794)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18794)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
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)
任何对解决方案的帮助将不胜感激。
编辑:
因此,在数据库和与之交互的 Activity 之间的代码来回查看之后,我设法让它再次工作。以下是我按确切顺序执行的操作:
老实说,我不知道哪个步骤真正解决了它。我猜是数据库中的日期字段在没有接收到数据时把事情搞砸了。
最佳答案
ArrayAdapter
中的数组至少包含一个 null
条目。那里不能有空值。
数组是在 getDiaryDBDataList()
中填充的,所以问题也在那里。
关于java - Android:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'java.lang.String java.lang.Object.toString()',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34939506/
为了让我的代码几乎完全用 Jquery 编写,我想用 Jquery 重写 AJAX 调用。 这是从网页到 Tomcat servlet 的调用。 我目前情况的类似代码: var http = new
我想使用 JNI 从 Java 调用 C 函数。在 C 函数中,我想创建一个 JVM 并调用一些 Java 对象。当我尝试创建 JVM 时,JNI_CreateJavaVM 返回 -1。 所以,我想知
环顾四周,我发现从 HTML 调用 Javascript 函数的最佳方法是将函数本身放在 HTML 中,而不是外部 Javascript 文件。所以我一直在网上四处寻找,找到了一些简短的教程,我可以根
我有这个组件: import {Component} from 'angular2/core'; import {UserServices} from '../services/UserService
我正在尝试用 C 实现一个简单的 OpenSSL 客户端/服务器模型,并且对 BIO_* 调用的使用感到好奇,与原始 SSL_* 调用相比,它允许一些不错的功能。 我对此比较陌生,所以我可能会完全错误
我正在处理有关异步调用的难题: 一个 JQuery 函数在用户点击时执行,然后调用一个 php 文件来检查用户输入是否与数据库中已有的信息重叠。如果是这样,则应提示用户确认是否要继续或取消,如果他单击
我有以下类(class)。 public Task { public static Task getInstance(String taskName) { return new
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我有一个java spring boot api(数据接收器),客户端调用它来保存一些数据。一旦我完成了数据的持久化,我想进行另一个 api 调用(应该处理持久化的数据 - 数据聚合器),它应该自行异
首先,这涉及桌面应用程序而不是 ASP .Net 应用程序。 我已经为我的项目添加了一个 Web 引用,并构建了各种数据对象,例如 PayerInfo、Address 和 CreditCard。但问题
我如何告诉 FAKE 编译 .fs文件使用 fsc ? 解释如何传递参数的奖励积分,如 -a和 -target:dll . 编辑:我应该澄清一下,我正在尝试在没有 MSBuild/xbuild/.sl
我使用下划线模板配置了一个简单的主干模型和 View 。两个单独的 API 使用完全相同的配置。 API 1 按预期工作。 要重现该问题,请注释掉 API 1 的 URL,并取消注释 API 2 的
我不确定什么是更好的做法或更现实的做法。我希望从头开始创建目录系统,但不确定最佳方法是什么。 我想我在需要显示信息时使用对象,例如 info.php?id=100。有这样的代码用于显示 Game.cl
from datetime import timedelta class A: def __abs__(self): return -self class B1(A):
我在操作此生命游戏示例代码中的数组时遇到问题。 情况: “生命游戏”是约翰·康威发明的一种细胞自动化技术。它由一个细胞网格组成,这些细胞可以根据数学规则生存/死亡/繁殖。该网格中的活细胞和死细胞通过
如果我像这样调用 read() 来读取文件: unsigned char buf[512]; memset(buf, 0, sizeof(unsigned char) * 512); int fd;
我用 C 编写了一个简单的服务器,并希望调用它的功能与调用其他 C 守护程序的功能相同(例如使用 ./ftpd start 调用它并使用 ./ftpd stop 关闭该实例)。显然我遇到的问题是我不知
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
在 dos 中,当我粘贴此命令时它会起作用: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" https://google.
我希望能够从 cmd 在我的 Windows 10 计算机上调用 python3。 我已重新安装 Python3.7 以确保选择“添加到路径”选项,但仍无法调用 python3 并使 CMD 启动 P
我是一名优秀的程序员,十分优秀!