sách gpt4 ai đã đi

java - 为什么我的 "Notes"选项卡崩溃了?

In lại 作者:行者123 更新时间:2023-12-02 04:26:53 31 4
mua khóa gpt4 Nike

我尝试寻找答案,但我对这个编程领域和使用 Android Studio 还比较陌生。首先,这是模拟器崩溃时收到的错误。请耐心等待,因为有很多代码,这是我第一次发帖。

--------- beginning of crash
08-16 16:59:46.930 1861-1861/com.example.richard.stopandsearch E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.richard.stopandsearch, PID: 1861
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.richard.stopandsearch.MainActivity$NotesListAdapter.getView(MainActivity.java:157)
at android.widget.AbsListView.obtainView(AbsListView.java:2347)
at android.widget.ListView.measureHeightOfChildren(ListView.java:1270)
at android.widget.ListView.onMeasure(ListView.java:1182)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.support.v7.internal.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:124)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:444)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1436)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:722)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:613)
at android.view.View.measure(View.java:17547)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5535)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:436)
at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2615)
at android.view.View.measure(View.java:17547)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2015)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1173)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1379)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5885)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767)
at android.view.Choreographer.doCallbacks(Choreographer.java:580)
at android.view.Choreographer.doFrame(Choreographer.java:550)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:753)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.Activ

MainActivity.Java

package com.example.richard.stopandsearch;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TabHost;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

EditText LocationTxt, TimeTxt, DateTxt, OfficerTxt, DetailsTxt;
List Notes = new ArrayList();
ListView notesListView;
databaseHandler dbHandler;



@Ghi đè
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

LocationTxt = (EditText) findViewById(R.id.txtLocation);
TimeTxt = (EditText) findViewById(R.id.txtTime);
DateTxt = (EditText) findViewById(R.id.txtDate);
OfficerTxt = (EditText) findViewById(R.id.txtOfficer);
DetailsTxt = (EditText) findViewById(R.id.txtDetails);
notesListView = (ListView) findViewById(R.id.listView);
dbHandler = new databaseHandler(getApplicationContext());
TabHost tabHost = (TabHost) findViewById(R.id.tabHost);

tabHost.setup();

TabHost.TabSpec tabSpec = tabHost.newTabSpec("addNote");
tabSpec.setContent(R.id.tabAddNote);
tabSpec.setIndicator("AddNote");
tabHost.addTab(tabSpec);

tabSpec = tabHost.newTabSpec("notes");
tabSpec.setContent(R.id.tabNotes);
tabSpec.setIndicator("Notes");
tabHost.addTab(tabSpec);

tabSpec = tabHost.newTabSpec("info");
tabSpec.setContent(R.id.tabInfo);
tabSpec.setIndicator("Info");
tabHost.addTab(tabSpec);

final Button addBtn = (Button) findViewById(R.id.btnAdd);
addBtn.setOnClickListener(new View.OnClickListener() {
@Ghi đè
public void onClick(View view) {

Notes notes = new Notes(dbHandler.getNotesCount(), String.valueOf(LocationTxt.getText()), String.valueOf(TimeTxt.getText()), String.valueOf(DateTxt.getText()), String.valueOf(OfficerTxt.getText()), String.valueOf(DetailsTxt.getText()));
if (!noteExists(notes)) {
// Notes.add (new Notes(0, LocationTxt.getText().toString(), TimeTxt.getText().toString(), DateTxt.getText().toString(), OfficerTxt.getText().toString(), DetailsTxt.getText().toString()));
dbHandler.createNote(notes);
Notes.add(notes);

// populateList();
Toast.makeText(getApplicationContext(), "Your note has been added.", Toast.LENGTH_SHORT).show();
return;
}
Toast.makeText(getApplicationContext(), String.valueOf(LocationTxt.getText()) + " already exists. Please enter a different location.", Toast.LENGTH_SHORT).show();
}
});

DetailsTxt.addTextChangedListener(new TextWatcher() {
@Ghi đè
public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Ghi đè
public void onTextChanged(CharSequence s, int start, int before, int count) {
addBtn.setEnabled(String.valueOf(DetailsTxt.getText()).trim().length() >0);

// @Override
// public void afterTextChanged(Editable s) {

}

@Ghi đè
public void afterTextChanged(Editable s) {

}
});

// List addableNotes = dbHandler.getAllNotes();
// int noteCount = dbHandler.getNotesCount();

// for (int i=0; i < noteCount; i++) {
// Notes.add(addableNotes.get(i));
// }
if (dbHandler.getNotesCount()!=0)
Notes.addAll(dbHandler.getAllNotes());

// if (!addableNotes.isEmpty())
populateList();
}

private boolean noteExists(Notes notes) {
String location = notes.getLocation();
int notesCount = Notes.size();

for (int i=0; i < notesCount; i++) {
if(location.compareToIgnoreCase(Notes.get(i).getLocation()) ==0)
trả về giá trị đúng;
}
trả về false;
}

private void populateList() {
ArrayAdapter adapter = new NotesListAdapter();
notesListView.setAdapter(adapter);
}


// private void addNotes(String location, String time, String date, String officer, String details) {
//Notes.add(new Notes(location, time, date, officer, details));

// }

public class NotesListAdapter extends ArrayAdapter {
public NotesListAdapter() {

super(MainActivity.this, R.layout.listviewitem, Notes);
}

@Ghi đè
public View getView(int position, View view, ViewGroup parent) {
if (view == null)
view = getLayoutInflater().inflate(R.layout.listviewitem, parent, false);

Notes currentNote = Notes.get(position);

TextView location = (TextView) view.findViewById(R.id.txtLocationView);
location.setText(currentNote.getLocation());
TextView time = (TextView) view.findViewById(R.id.txtTimeView);
time.setText (currentNote.getLocation());
TextView date = (TextView) view.findViewById(R.id.txtDateView);
date.setText (currentNote.getLocation());
TextView officer = (TextView) view.findViewById(R.id.txtOfficer);
officer.setText(currentNote.getLocation());
TextView details = (TextView) view.findViewById(R.id.txtDetailsView);
details.setText(currentNote.getLocation());

quay lại xem;
}

}

@Ghi đè
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
trả về giá trị đúng;
}

@Ghi đè
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
trả về giá trị đúng;
}

return super.onOptionsItemSelected(item);
}
}

databaseHandler.java

package com.example.richard.stopandsearch;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;
import java.util.List;

public class databaseHandler extends SQLiteOpenHelper {

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "notes",
TABLE_NOTES = "notes",
KEY_ID = "id",
KEY_LOCATION = "location",
KEY_TIME = "time",
KEY_DATE = "date",
KEY_OFFICER = "officer",
KEY_DETAILS = "details";

public databaseHandler(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);

}

@Ghi đè
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NOTES + "(" + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_LOCATION + " TEXT, " + KEY_TIME + " TEXT, " + KEY_DATE + " TEXT, " + KEY_OFFICER + " TEXT, " + KEY_DETAILS + " TEXT)");
}

@Ghi đè
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NOTES);
onCreate(db);
}

public void createNote(Notes notes) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_LOCATION, notes.getLocation());
values.put(KEY_TIME, notes.getTime());
values.put(KEY_DATE, notes.getDate());
values.put(KEY_OFFICER, notes.getOfficer());
values.put(KEY_DETAILS, notes.getDetails());

db.insert(TABLE_NOTES, null, values);
db.close();
}

public Notes getNotes(int id) {
SQLiteDatabase db = getReadableDatabase();

Cursor cursor = db.query(TABLE_NOTES, new String[] { KEY_ID, KEY_LOCATION, KEY_TIME, KEY_DATE, KEY_OFFICER, KEY_DETAILS }, KEY_ID + "=?", new String [] {String.valueOf(id) }, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
assert cursor != null;
Notes notes = new Notes(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5));
db.close();
cursor.close();
return notes;
}


public void deleteNote(Notes notes) {
SQLiteDatabase db = getWritableDatabase();
db.delete(TABLE_NOTES, KEY_ID + "=?", new String[] {String.valueOf(notes.getId())});
db.close();
}

public int getNotesCount () {
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NOTES, null);
int count = cursor.getCount();
cursor.close();
db.close();

return count;
}

public int updateNotes(Notes notes) {
SQLiteDatabase db = getWritableDatabase();

ContentValues values = new ContentValues();

values.put(KEY_LOCATION, notes.getLocation());
values.put(KEY_TIME, notes.getTime());
values.put(KEY_DATE, notes.getDate());
values.put(KEY_OFFICER, notes.getOfficer());
values.put(KEY_DETAILS, notes.getDetails());

int rowsAffected = db.update(TABLE_NOTES, values, KEY_ID + "=?", new String[]{String.valueOf(notes.getId())});
db.close();

return rowsAffected;

}


public List getAllNotes() {
List notes = new ArrayList();

SQLiteDatabase db = getWritableDatabase();
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NOTES, null);

if (cursor.moveToFirst()) {

LÀM {
notes.add(new Notes(Integer.parseInt(cursor.getString(0)),cursor.getString(1),cursor.getString(2),cursor.getString(3), cursor.getString(4), cursor.getString(5)));

}
while (cursor.moveToNext());
}
cursor.close();
db.close();
return notes;
}

}

Notes.Java

package com.example.richard.stopandsearch;

public class Notes {

private String _location, _time, _date, _officer, _details;
private int _id;

public Notes (int id, String location, String time, String date, String officer, String details) {
_id = id;
_location = location;
_time = time;
_date = date;
_officer = officer;
_details = details;
}

public int getId() {return _id; }
public String getLocation() {
return _location;
}
public String getTime() {
return _time;
}
public String getDate() {
return _date;
}
public String getOfficer() {
return _officer;
}
public String getDetails() {
return _details;
}


}

Activity_Main.xml


xmlns:tools="http://schemas.android.com/tools"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="phù hợp với cha mẹ"
tools:context=".MainActivity"
android:orientation="vertical"
android:background="#f9f9f9">

<>
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/tabHost">


android:layout_width="phù hợp với cha mẹ"
android:layout_height="phù hợp với cha mẹ"
android:orientation="vertical">

<>
android:id="@android:id/tabs"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="wrap_content">

<>
android:id="@android:id/tabcontent"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="match_parent">


android:id="@+id/tabInfo"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="phù hợp với cha mẹ"
android:orientation="vertical">


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imgLogo3"
android:layout_gravity="center_horizontal"
android:src="@drawable/policelogo" />


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Information"
android:id="@+id/txtInfo"
android:textColor="#1b0f3e"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp" />



android:id="@+id/tabNotes"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="phù hợp với cha mẹ"
android:orientation="vertical">


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imgLogo"
android:layout_gravity="center_horizontal"
android:src="@drawable/policelogo" />


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Notes"
android:id="@+id/txtNotes"
android:layout_marginTop="16dp"
android:layout_gravity="center_horizontal"
android:singleLine="false"
android:textColor="#1b0f3e" />


android:layout_width="phù hợp với cha mẹ"
android:layout_height="wrap_content"
android:id="@+id/listView"
android:layout_gravity="center_horizontal" />



android:id="@+id/tabAddNote"
android:layout_width="phù hợp với cha mẹ"
android:layout_height="phù hợp với cha mẹ"
android:orientation="vertical">


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/imgLogo2"
android:layout_gravity="center_horizontal"
android:src="@drawable/policelogo" />


android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Add Note"
android:id="@+id/lblNotesTitle"
android:layout_gravity="center_horizontal"
android:layout_marginTop="10dp"
android:textColor="#1b0f3e" />


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:id="@+id/txtLocation"
android:layout_marginTop="16dp"
android:hint="Location"
android:textColor="#1b0f3e" />


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="thời gian"
android:ems="10"
android:id="@+id/txtTime"
android:hint="Time"
android:layout_marginTop="16dp"
android:textColor="#1b0f3e" />


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="date"
android:ems="10"
android:id="@+id/txtDate"
android:hint="Date"
android:layout_marginTop="16dp"
android:textColor="#1b0f3e" />


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txtOfficer"
android:hint="Officer name/number"
android:layout_marginTop="16dp"
android:textColor="#1b0f3e" />


android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/txtDetails"
android:hint="Event details"
android:layout_marginTop="16dp"
android:lines="4"
android:textColor="#1b0f3e" />

<>
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="Add Note"
android:id="@+id/btnAdd"
android:layout_gravity="center_horizontal"
android:layout_marginTop="16dp"
android:enabled="false"
android:textColor="#1b0f3e" />







我再次对大量代码表示歉意,但我希望有一些东西对于有经验的人来说可能是显而易见的,但我却无法理解。提前致谢。

1 Câu trả lời

从错误日志来看,看起来好像您在 getView() 方法中膨胀了 listviewitem.xml,但是小部件 (TextViews) 您引用的内容位于 activity_main.xml ở giữa.

biên tập:嗯,至少有一个是,带有 nhận dạng txtOfficer

就分辨率而言,请确保您在 xml 布局中分配的所有 nhận dạng 属性都是唯一的,并确保您仅使用 findViewById() 定位调用 Xem 中包含的小部件:

view = getLayoutInflater().inflate(R.layout.listviewitem, parent, false);
view.findViewById(*id of a widget inside listviewitem.xml*)

关于java - 为什么我的 "Notes"选项卡崩溃了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037945/

31 4 0
Bài viết được đề xuất: Làm thế nào để thực thi Java từ Java?
Bài viết được đề xuất: java - 检查数组中最大和最小元素的数量
Bài viết được đề xuất: java-如何使用两个二维数组计算2个数字的总和?
Bài viết được đề xuất: java - 使用带有字符串分割器的扫描仪
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com