繁体   English   中英

为什么会出现“无法访问的代码”和“变量未初始化”的编译错误?

[英]Why do I get an “unreachable code” and “variable not initialized” compilation error?

嗨,我是Java的新手,正在尝试开发一个已经存在的Anti-ragging应用程序,以支持更新的api,例如姜饼的棒棒糖。 我已经反编译了apk并提取了源代码,并在Gradle系统中构建了它。

尽管源代码正确,但是我在Java代码中遇到了3个错误...一周之内无法弄清楚。

该应用程序包含4个屏幕。 主屏幕有一个发送按钮来发送消息,第二个设置屏幕有两个按钮来设置我们要发送的消息并设置我们要发送消息的联系人...其他两个屏幕是的自定义对话框布局Set Meaasge和联系方式。

该主要Java文件中没有错误,仅供参考

MainActivity.java:

package com.eminem.sharath.antiragging;
import android.content.Intent;
import android.content.SharedPreferences;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    String[] arrr1;
    private ImageButton ib1;
    private double latitude;
    private LocationManager lm;
    private double longitude;
    private SharedPreferences sp;
    private SharedPreferences sp1;

    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setLogo(R.mipmap.ic_launcher);
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setDisplayUseLogoEnabled(true);

        this.ib1 = (ImageButton)findViewById(R.id.imageButton1);
        this.lm = (LocationManager)getSystemService(LOCATION_SERVICE);
        this.ib1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View paramAnonymousView) {
                MainActivity.this.sp = MainActivity.this.getSharedPreferences("demo", 1);
                final String str1 = MainActivity.this.sp.getString("aaa", "");
                MainActivity.this.sp1 = MainActivity.this.getSharedPreferences("sdat", 1);
                String str2 = MainActivity.this.sp1.getString("snum", "");
                MainActivity.this.arrr1 = str2.split(",");
                Toast.makeText(MainActivity.this.getApplicationContext(), str2 + str1, Toast.LENGTH_SHORT).show();
                System.out.println("LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL" + str2 + str1);
                MainActivity.this.lm.requestLocationUpdates("gps", 1000L, 5.0F, new LocationListener() {
                    public void onLocationChanged(Location paramAnonymous2Location) {
                        Location localLocation = MainActivity.this.lm.getLastKnownLocation("gps");
                        MainActivity.this.latitude = localLocation.getLatitude();
                        MainActivity.this.longitude = localLocation.getLongitude();
                        Toast.makeText(MainActivity.this.getApplicationContext(), "Latitude:" + MainActivity.this.latitude + "\n" + "Longitude:" + MainActivity.this.longitude, Toast.LENGTH_SHORT).show();
                        String str = "http://maps.google.com/maps?=" + MainActivity.this.latitude + "," + MainActivity.this.longitude;
                        for (int i = 0; ; i++) {
                            if (i >= MainActivity.this.arrr1.length) {
                                return;
                            }
                            System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + MainActivity.this.arrr1);
                            SmsManager.getDefault().sendTextMessage(MainActivity.this.arrr1[i], null, str1 + " Come at this location" + str, null, null);
                        }
                    }

                    public void onProviderDisabled(String paramAnonymous2String) {
                    }

                    public void onProviderEnabled(String paramAnonymous2String) {
                    }

                    public void onStatusChanged(String paramAnonymous2String, int paramAnonymous2Int, Bundle paramAnonymous2Bundle) {
                    }
                });
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        startActivity(new Intent(getApplicationContext(), Settingss.class));
        return super.onOptionsItemSelected(item);
    }
}

这三个错误在此设置文件中...我在错误旁边注释了错误名称,以供参考。

Settings.java:

package com.eminem.sharath.antiragging;
import android.app.Dialog;
import android.content.ContentResolver;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.MultiAutoCompleteTextView;
import android.widget.MultiAutoCompleteTextView.CommaTokenizer;
import android.widget.Toast;
import java.io.PrintStream;
import java.util.ArrayList;

public class Settingss extends AppCompatActivity
{
    private ArrayList<String> alist = new ArrayList();
    private Button b1;
    private Button b2;
    SharedPreferences.Editor ed;
    private String setnum = "";
    SharedPreferences sp;

    protected void onCreate(Bundle paramBundle) {
        super.onCreate(paramBundle);
        setContentView(R.layout.contact);

        this.b1 = ((Button)findViewById(R.id.button1));
        this.b2 = ((Button)findViewById(R.id.button2));
        this.b1.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View paramAnonymousView)
            {
                Settingss.this.showDialog(1);
            }
        });
        this.b2.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View paramAnonymousView)
            {
                Settingss.this.showDialog(2);
            }
        });
    }

    protected Dialog onCreateDialog(int paramInt) {
        if (paramInt == 1) {
            final Dialog localDialog1 = new Dialog(this);
            localDialog1.setContentView(R.layout.tosetmessage);
            localDialog1.setTitle("Set Message");
            final EditText localEditText = (EditText)findViewById(R.id.editText1);
            Button localButton1 = (Button)findViewById(R.id.button1);
            Button localbutton2 = ((Button) findViewById(R.id.button2));
            localbutton2.setOnClickListener(new View.OnClickListener() {
                public void onClick(View paramAnonymousView) {
                    Settingss.this.sp = Settingss.this.getSharedPreferences("demo", 2);
                    Settingss.this.ed = Settingss.this.sp.edit();
                    Settingss.this.ed.putString("aaa", localEditText.getText().toString());
                    Settingss.this.ed.commit();
                    localDialog1.dismiss();
                }
            });
            localButton1.setOnClickListener(new View.OnClickListener()
            {
                public void onClick(View paramAnonymousView)
                {
                    localDialog1.dismiss();
                }
            });
            localDialog1.show();
        }
        while(true)
        {
            return super.onCreateDialog(paramInt);
            /*Error: unreachale statement*/     if (paramInt == 2)
            {
                final Dialog localDialog2 = new Dialog(this);
                localDialog2.setContentView(R.layout.multiautotext);
                localDialog2.setTitle("Set Contacts");
                final MultiAutoCompleteTextView localMultiAutoCompleteTextView = (MultiAutoCompleteTextView)localDialog2.findViewById(R.id.multiAutoCompleteTextView1);
                Button localButton2 = (Button)localDialog2.findViewById(R.id.button1);
                Button localButton3 = (Button)localDialog2.findViewById(R.id.button2);
                Cursor localCursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, "display_name ASC");
                if (localCursor.moveToFirst())
                {
                    do
                    {
                        String str1 = localCursor.getString(localCursor.getColumnIndex("display_name"));
                        String str2 = localCursor.getString(localCursor.getColumnIndex("data1"));
                        String str3 = str1 + "%" + str2;
                        this.alist.add(str3);
                    } while (localCursor.moveToNext());
                    ArrayAdapter localArrayAdapter = new ArrayAdapter(this, R.layout.simple_list_item, this.alist);
                    localMultiAutoCompleteTextView.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
                    localMultiAutoCompleteTextView.setAdapter(localArrayAdapter);
                }
                localButton2.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View paramAnonymousView)
                    {
                        String[] arrayOfString = localMultiAutoCompleteTextView.getText().toString().split(",");
                        int i = 0;
                        if (i >= arrayOfString.length)
                        {
                            System.out.println("************************" + Settingss.this.setnum);
                            Toast.makeText(Settingss.this.getApplicationContext(), Settingss.this.setnum, Toast.LENGTH_SHORT).show();
                            Settingss.this.sp = Settingss.this.getSharedPreferences("sdat", 2);
                            Settingss.this.ed = Settingss.this.sp.edit();
                            Settingss.this.ed.putString("snum", Settingss.this.setnum);
                            Settingss.this.ed.commit();
                            Settingss.this.setnum = "";
                            Settingss.this.finish();
                            return;
                        }
                        String str2;
                        if (arrayOfString[i].contains("%"))
                            str2 = arrayOfString[i].split("%")[1];
                        String str1;
                        for (Settingss.this.setnum = (Settingss.this.setnum + /*Error: Variable Str2 might not have been initialized*/  str2 + ",");; Settingss.this.setnum = (Settingss.this.setnum + str1 + ","))
                        {
                            i++;
                            break;
                            /*Error: unreachale statement*/     str1 = arrayOfString[i];
                        }
                    }
                });
                localButton3.setOnClickListener(new View.OnClickListener()
                {
                    public void onClick(View paramAnonymousView)
                    {
                        localDialog2.dismiss();
                    }
                });
                localDialog2.show();
            }
        }
    }
}

请帮助我调试应用程序。

我无意为该应用程序赢得任何荣誉,因为我还没有开发它……只是想使用用户界面并尝试一下新的api。

return语句将导致onCreateDialog方法return并且任何后续行都将不执行。 这就是为什么您收到unreachable code错误消息的原因。 同样, break语句将导致for循环结束。 随后的任何行都不会执行。

最后,您将收到/*Error: Variable Str2 might not have been initialized*/错误,因为必须首先初始化所有局部变量,然后才能首次使用它们。

对于/*Error: Variable Str2 might not have been initialized*/

更改String str2; String str2 = "";

至于其他两个错误,您有return; break; 在那些行之前。
无条件 returnbreak之后的任何语句都将无法访问,即,那里的代码(后续行)将无法执行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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