生成的apk问题不断崩溃

时间:2017-03-01 10:46:29

标签: android apk

这是一个学校项目,我按下保存并保存,当我按下加载按钮时,它应加载到TextView(标签)

问题在于,当我生成apk并将其安装到我的手机上时,只要我点击任何按钮,程序就会崩溃。
如果我在文本字段中输入任何内容都无关紧要 我不知道问题是什么,所以请帮忙!

我必须在我的表单上运行apk,因此在虚拟机上运行它来进行首先测试是不可能的。
我在2台设备上进行了测试,两者都给出了相同的结果

我的代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
 import android.widget.TextView;

 import android.widget.Toast;

 import java.io.FileInputStream;
 import java.io.FileOutputStream;

 public class MainActivity extends AppCompatActivity {

 private String file = "mydatabase";

@Override
protected void onCreate(Bundle savedInstanceState) {


    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}

  public void Save(View view) {
    EditText save = (EditText) findViewById(R.id.txt_save);
    String data = save.getText().toString();

    try {
        FileOutputStream fOut = openFileOutput(file, MODE_PRIVATE);
        fOut.write(data.getBytes());
        fOut.close();
         Toast.makeText(getBaseContext(), "File saved sucessfully",                                        Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
          e.printStackTrace();
    }
 }


public void load (View view) {
    TextView load = (TextView) findViewById(R.id.lbl_Display);

    try {
        FileInputStream fin = openFileInput(file);
        int c;
        String temp = "";
        while ((c = fin.read()) != -1) {
            temp = temp + Character.toString((char) c);
        }
        load.setText(temp);
        Toast.makeText(getBaseContext(), "File Read Sucessfully", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
    }
}}

以下是我正在使用的UI,其中txt_save是文本字段,lbl_Display是TextView enter image description here

错误:

W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0xb17c34f0)
E/AndroidRuntime: FATAL EXCEPTION: main
                  java.lang.IllegalStateException: Could not find method Save (MainActivity)(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'button'
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327)
                      at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284)
                      at android.view.View.performClick(View.java:2485)
                      at android.view.View$PerformClick.run(View.java:9080)
                      at android.os.Handler.handleCallback(Handler.java:587)
                      at android.os.Handler.dispatchMessage(Handler.java:92)
                      at android.os.Looper.loop(Looper.java:130)
                      at android.app.ActivityThread.main(ActivityThread.java:3683)
                      at java.lang.reflect.Method.invokeNative(Native Method)
                      at java.lang.reflect.Method.invoke(Method.java:507)
                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
                      at dalvik.system.NativeStart.main(Native Method)
Application terminated.

我正在使用GingerBread(API级别10)

我的清单

  <?xml version="1.0" encoding="utf-8"?>
  <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.example.user.mydatabase">


    <application
      android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    </application>

 </manifest>

2 个答案:

答案 0 :(得分:0)

  

无法在父级或祖先的上下文中找到方法Save(MainActivity)(View)for android:onClick

<强>然而

你已经证明了这个

public void Save(View view) {

所以,我建议解决方案不是使用XML并从Java设置点击监听器

答案 1 :(得分:0)

好的,我发现了你的问题。 它是AppCompatActivity与API级别10结合使用的扩展。 你不能在api 15级(或者11级)之前使用它。 您需要直接从Activity扩展。或者将最低API级别提高一点。

有关更多信息,请阅读我使用的来源:

Activity, AppCompatActivity, FragmentActivity, and ActionBarActivity: When to Use Which?