使用空白活动时崩溃记事本应用程序


this is what the android monitor is showing:

08-26 19:04:17.456 10081-10089/?E/art:向调试器发送回复失败:管道损坏 08-26 19:04:17.456 10081-10089/? I/art:调试器不再处于活动状态 08-26 19:04:17.582 10081-10081/?I/即时运行:启动即时运行服务器:是主服务器 进程 08-26 19:04:17.628 10081-10081/?W/art:在安卓4.1之前, 方法android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode( 会错误地覆盖 中的包私有方法 android.graphics.drawable.Drawable 08-26 19:04:17.736 10081-10081/? D/Android运行时:关闭虚拟机 08-26 19:04:17.736 10081-10081/? E/AndroidRuntime: fattal EXCEPTION: main
Process: com.example.sayandeep.notepad, PID: 10081
java.lang.RuntimeException: 无法启动活动 ComponentInfo{com.example.sayandeep.notepad/com.example.sayandeep.notepad.MainActivity}: java.lang.NullPointerException: 尝试调用虚拟方法 'void android.widget.EditText.setText(java.lang.CharSequence(' on a null 对象引用
位于 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325( 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387( at android.app.ActivityThread.access$800(ActivityThread.java:151(
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303(at android.os.Handler.dispatchMessage(Handler.java:
102(at
android.os.Looper.loop(Looper.java:135(at
android.app.ActivityThread.main(ActivityThread.java:5254(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( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698(由:
java.lang.NullPointerException: Try to invoke virtual 方法 'void android.widget.EditText.setText(java.lang.CharSequence(' 在空
对象引用上 com.example.sayandeep.notepad.MainActivity.onCreate(MainActivity.java:38( at android.app.Activity.performCreate(Activity.java:5990(
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106( 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278( 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387( at android.app.ActivityThread.access$800(ActivityThread.java:151(
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303( at android.os.Handler.dispatchMessage(Handler.java:102( at
android.os.Looper.loop(Looper.java:135( at android.app.ActivityThread.main(ActivityThread.java:5254( 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( at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698( 08-26 19:04:26.858 10081-10081/com.example.sayandeep.notepad I/Process: 发送信号。PID: 10081 SIG: 9

主要活动

package com.example.sayandeep.notepad;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.Toast;
import java.io.BufferedReader;
import java.io.File;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class MainActivity extends AppCompatActivity {
EditText content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
content=(EditText)findViewById(R.id.content);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view)   {
Save("Note1.txt");
}
});
content.setText((Open("Note1.txt")));
}
public void Save(String filename)  {
try {
OutputStreamWriter out = new OutputStreamWriter(openFileOutput(filename, 0));
out.write(content.getText().toString());
out.close();
Toast.makeText(this, "Note saved!", Toast.LENGTH_SHORT).show();
} catch (Throwable t) {
Toast.makeText(this, "Exception: " + t.toString(), Toast.LENGTH_LONG).show();
}
}
public boolean FileExists(String filename) {
File file=getBaseContext().getFileStreamPath(filename);
return file.exists();
}
public String Open(String filename)  {
String temp="";
if(FileExists(filename))
{
try
{
InputStream in=openFileInput(filename);
if(in!=null)
{
InputStreamReader tmp=new InputStreamReader(in);
BufferedReader reader=new BufferedReader(tmp);
String str;
StringBuilder buf=new StringBuilder();
while((str=reader.readLine())!=null)
{buf.append(str+"n");}in.close();
temp=buf.toString();
}
}catch(java.io.FileNotFoundException e){}catch(Throwable t){
Toast.makeText(this, "Exception: " + t.toString(), Toast.LENGTH_LONG).show();}
}return temp;
}
@Override
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);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
#Activity_main.xml#
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.sayandeep.notepad.MainActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_menu_save"
android:onClick="onClick"/>
</android.support.design.widget.CoordinatorLayout>

#Content_main.xml#

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.sayandeep.notepad.MainActivity"
tools:showIn="@layout/activity_main">
<EditText android:id="@+id/content"
android:layout_width="391dp"
android:layout_height="523dp"
android:hint="Type here..."
android:gravity="top"
android:inputType="textPersonName"
android:layout_centerVertical="true"
android:layout_alignParentStart="true" />
</android.support.constraint.ConstraintLayout>

您应该在主布局中包含content_main.xml。在浮动操作按钮之前将其添加到您的主布局中。在这里阅读

<include layout="@layout/content_main"/>

最新更新