繁体   English   中英

OnPreferenceChangeListener无法访问的代码

[英]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 ifelse 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM