【问题标题】:Strange exception on a button按钮上的奇怪异常
【发布时间】:2016-12-17 19:35:24
【问题描述】:

所以,我只想在点击按钮时保存到文件,但是,我有一个 FC,这里是代码:

final Button button = (Button) findViewById(R.id.button);

 button.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
 String value1 = vol.getText().toString();
 String value2 = kil.getText().toString();


                     if (value1 != null && value1.trim().length() > 0 && value2 != null && value2.trim().length() > 0)
                     {
                             float q1=Float.parseFloat(vol.getText().toString());
                             float q2=Float.parseFloat(kil.getText().toString());
                             float x=((q1 / q2)* 100);
                             String y= Float.toString(x);
                             cons.setText(y);

                             SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                             data = format.format(new Date());
                             data = data + " : " + y + " L/100km\n" + value1 + " litres "+ value2 + " km\n";
      SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
      if (data != "" ) {
      String fileName = getResources().getString(R.string.fileName);
      String fileDir = ""+ preferences.getString("login", "") + "."+ preferences.getString("marque", "") + ".";
      myIO.WriteSettings(context, fileDir + fileName, data);
      data = "";
                                }

                     }
                     else 
                     {
                     Toast.makeText(carburant.this, "Veuillez vérifier les deux champs", Toast.LENGTH_LONG).show();
                     }
     }

});

Logcat: 03-16 20:52:59.080:错误/AndroidRuntime(1019):致命异常:主要 03-16 20:52:59.080: 错误/AndroidRuntime(1019): java.lang.NullPointerException 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 android.preference.PreferenceManager.getDefaultSharedPreferencesName(PreferenceManager.java: 353) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:348) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在carburant.android.com.carburant$1.onClick(carburant.java:118) 03-16 20:52:59.080: ERROR/AndroidRuntime(1019): at android.view.View.performClick(View.java:2485) 03- 16 20:52:59.080: 错误/AndroidRuntime(1019): 在 android.view.View$PerformClick.run(View.java:9080) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 android. os.Handler.handleCallback(Handler.java:587) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 android.os.Handler.dispatchMessage(Handler.java:92) 03-16 20:52: 59.080: 错误/AndroidRuntime(1019): 在 android.os.Looper.loop(Looper.java:123) 03-16 20:52:59.080:错误/AndroidRuntime(1019): 在 android.app.ActivityThread.main(ActivityThread.java:3683) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 java.lang.reflect.Method.invokeNative(Native方法) 03-16 20:52:59.080: ERROR/AndroidRuntime(1019): at java.lang.reflect.Method.invoke(Method.java:507) 03-16 20:52:59.080: ERROR/AndroidRuntime(1019) : 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 03-16 20:52:59.080: 错误/AndroidRuntime(1019): 在 com.android.internal.os.ZygoteInit.main (ZygoteInit.java:597) 03-16 20:52:59.080: ERROR/AndroidRuntime(1019): at dalvik.system.NativeStart.main(Native Method) 03-16 20:52:59.080: WARN/ActivityManager(68) :强制完成活动 carburant.android.com/.carburant 03-16 20:52:59.854:WARN/ActivityManager(68):HistoryRecord{406e89b8 carburant.android.com/.carburant}

的活动暂停超时

有什么帮助吗? 谢谢:)。

【问题讨论】:

  • 您能否粘贴 logcat 堆栈跟踪以查明发生错误的位置?

标签: android button


【解决方案1】:

根据您的堆栈跟踪和额外信息,错误是该行的空指针

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); 

我怀疑context 参数为空。 context 是您已经声明并分配给上下文的变量名吗?

编辑:

您需要将 Context 分配给您的上下文变量。只是将其声明为全局变量而不分配它会使其为空。

请试试这个:

private Context context = getApplicationContext();

【讨论】:

    【解决方案2】:

    好吧,我忘了添加这个:

    context = getApplicationContext();
    

    【讨论】:

    • 我尝试投票,但我必须达到 15 名声望:\!无论如何,谢谢:) ;)
    • @Hakan:如果您允许,我有一个问题:制作私有上下文上下文有什么区别 = getApplicationContext();和上下文上下文=活动.this;我注意到在使用 Context context = getApplicationContext(); 创建菜单(包括警报对话框)时它只会以 FC 结束:\
    • getApplicationContext() 返回当前进程的单个全局应用程序对象的上下文。这通常只应在您需要一个生命周期与当前上下文分离的上下文时使用,该上下文与进程的生命周期而不是当前组件相关联。 activity.this 查看当前上下文/当前组件,因此当您尝试执行 UI 相关对象(例如 AlertDialog)时,您需要查看当前上下文,即 activity.this
    猜你喜欢
    • 1970-01-01
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多