[英]OnPreferenceChangeListener unreachable code
我正在开发我的第一个应用程序,该应用程序从/ data将调整项添加到local.prop。 我使用实现OnPreferenceChangeListener的PreferenceActivity。 我通过findPreference检测到密钥。
这是代码:
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if ("first_key".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
// code
}
if ("second_key".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
// code
}
}
一切正常,因为我添加了第二个if(second_key)。 错误是“无法访问的代码”。 请帮我! 我做错了什么?
您尚未添加所有代码。
这不会导致您编写的错误。 但是,如果您在第二次if之前返回,可能会出现错误,这将是无法到达的。
如果这是一个基于docs的实现方法, 则您可能希望最后返回true,因此设置了首选项:
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if ("first_key".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
// Do something if pref 1
} else if ("second_key".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
// Do something if pref 2
}
return true;
}
请注意, else if
您else if
这里可以使用else if
,因为您不能同时使用两个键来使用单个首选项。 考虑到已经设置了侦听器和设置了监听器,不同的首选项将对该方法进行不同的调用。
package com.fast_gaming.performance;
import java.io.DataOutputStream;
import java.io.File;
import android.content.Context;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.Preference.OnPreferenceChangeListener;
import android.util.Log;
import android.widget.Toast;
public class Main extends PreferenceActivity implements OnPreferenceChangeListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.main);
findPreference("enable").setOnPreferenceChangeListener(this);
findPreference("debug.sf.nobootanimation").setOnPreferenceChangeListener(this);
}
public boolean onPreferenceChange(Preference preference, Object newValue) {
String key = preference.getKey();
if ("enable".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
try {
Process enable = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(enable.getOutputStream());
outputStream.writeBytes("cd /data\n");
outputStream.flush();
outputStream.writeBytes("touch local.prop\n");
outputStream.flush();
outputStream.writeBytes("chmod 0777 local.prop\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
enable.waitFor();
File file = new File("/system/bin/su");
if (file.exists()) {
Log.d("Main", "This device is rooted!");
return true;
} else {
Log.d("Main", "This device is not rooted!");
Context context = getApplicationContext();
CharSequence text = "This device is not rooted!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return false;
}
} catch(Exception e) {
return false;
}
} else {
try {
Process disable = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(disable.getOutputStream());
outputStream.writeBytes("cd /data\n");
outputStream.flush();
outputStream.writeBytes("rm local.prop\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
disable.waitFor();
File file = new File("/system/bin/su");
if (file.exists()) {
Log.d("Main", "This device is rooted!");
return true;
} else {
Log.d("Main", "This device is not rooted!");
Context context = getApplicationContext();
CharSequence text = "This device is not rooted!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return false;
}
} catch (Exception e) {
return false;
}
}
else if ("debug.sf.nobootanimation".equals(key) && !((CheckBoxPreference) preference).isChecked()) {
try {
Process enable1 = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(enable1.getOutputStream());
outputStream.writeBytes("cd /data\n");
outputStream.flush();
outputStream.writeBytes("echo \"debug.sf.nobootanimation=1\" > local.prop\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
enable1.waitFor();
File file = new File("/system/bin/su");
if (file.exists()) {
Log.d("Main", "This device is rooted!");
return true;
} else {
Log.d("Main", "This device is not rooted!");
Context context = getApplicationContext();
CharSequence text = "This device is not rooted!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return false;
}
} catch (Exception e) {
return false;
}
} else {
try {
Process enable1 = Runtime.getRuntime().exec("su");
DataOutputStream outputStream = new DataOutputStream(enable1.getOutputStream());
outputStream.writeBytes("cd /data\n");
outputStream.flush();
outputStream.writeBytes("sed '/debug..sf.nobootanimation=1/d' filename.txt\n");
outputStream.flush();
outputStream.writeBytes("exit\n");
outputStream.flush();
enable1.waitFor();
File file = new File("/system/bin/su");
if (file.exists()) {
Log.d("Main", "This device is rooted!");
return true;
} else {
Log.d("Main", "This device is not rooted!");
Context context = getApplicationContext();
CharSequence text = "This device is not rooted!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
return false;
}
} catch (Exception e) {
return false;
}
} return true;
}
}
这是完整的代码。 我说了你的话,什么都没发生。 Eclsipse对我说:“令牌“ else”上的语法错误,删除此令牌”,如果我删除其他令牌,则再次出现“无法访问的代码” ...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.