访问其他 Java 活动时静态字符串变量不会更改

库汉

我开发了一个应用程序,我们可以在其中更改 IP 地址以连接到在 xampp 服务器上运行的数据库。

这是我的 MainActivity.java

在其中我声明了一个名为“ip”的公共静态字符串变量并为其设置了默认值。我使用警告框使用菜单选项更改了此 ip。当使用小吃店显示更改的 ip 时,它会显示更改。但是试图在 Mainactivity.ip 的另一个名为“doctor_login.java”的活动中访问该“ip”。它不会更改 ip,而是使用默认 ip 本身。下面我展示了截图和代码。请帮助我解决这个问题。

public class MainActivity extends AppCompatActivity { public static String ip="192.168.43.97";// This is default ip
public static final String dbuser = "root";
public static final String dbpass = "kughan";

private SectionsPagerAdapter mSectionsPagerAdapter;
private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());


    mViewPager = (ViewPager) findViewById(R.id.container);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "App by KUGHAN EV", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

}


@Override
public boolean onCreateOptionsMenu(Menu menu) {

    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

   if (id == R.id.action_settings) {

        AlertDialog.Builder ipalert = new AlertDialog.Builder(MainActivity.this);
        ipalert.setCancelable(false);
        ipalert.setTitle("Change IP");
        ipalert.setMessage("Enter your server ip below:");

        final EditText input = new EditText(MainActivity.this);
        input.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);
        RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
        input.setLayoutParams(lp);
        ipalert.setView(input);
        ipalert.setPositiveButton("CHANGE", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                 String cip=input.getText().toString();
                    ip=cip;  // Trying to change ip address from edittext
                    Snackbar.make(getCurrentFocus(),"Ip changed to "+ip,Snackbar.LENGTH_LONG).setAction(null,null).show();
            }
        });
        ipalert.setNegativeButton("CANCEL",null);
        ipalert.show();
    }
    if(id== R.id.showip){
        Snackbar.make(getCurrentFocus(),"Your IP is "+ip,Snackbar.LENGTH_LONG).setAction(null,null).show();
    }

    return super.onOptionsItemSelected(item);
}


public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position){
            case 0:
                doctor_login tab1 = new doctor_login();
                return tab1;
            case 1:
                patient_login tab2 = new patient_login();
                return tab2;
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        // Show 3 total pages.
        return 2;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 0:
                return "DOCTOR";
            case 1:
                return "PATIENT";
            }
        return null;
    }


}


//This is my doctor_login activity


public class doctor_login extends Fragment {
public static String logged;
public static String loggedid;
private String url;
private static final String user = MainActivity.dbuser;
private static final String pass = MainActivity.dbpass;

EditText usertxt,passtxt;
Button login,reg;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    final View rootView = inflater.inflate(R.layout.activity_doctor_login, container, false);
    url ="jdbc:mysql://"+MainActivity.ip+":3306/mediapp";  //getting value from mainactivity ip value 

    usertxt=(EditText) rootView.findViewById(R.id.editText);
    passtxt=(EditText)rootView.findViewById(R.id.editText2);
    login=(Button)rootView.findViewById(R.id.button);
    reg=(Button)rootView.findViewById(R.id.button2);

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(usertxt.getText().toString().length()==0 || passtxt.getText().toString().length()==0){
                Snackbar.make(getView(),"Fill all credential details",Snackbar.LENGTH_LONG).setAction("Action",null).show();
            }else{
                testDB();
            }
        }
    });

    reg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent1 = new Intent(doctor_login.this.getActivity(),doctor_signup.class);
            startActivity(intent1);
        }
    });

    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    Snackbar.make(getView(),"Welcome to DigiMedApp",Snackbar.LENGTH_LONG).setAction("Action",null).show();
}

public void testDB(){
    Toast.makeText(getContext(),url,Toast.LENGTH_LONG).show();

        try
        {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url,user,pass);
            Statement st = con.createStatement();
            ResultSet rs =  st.executeQuery("select name,id from doctorlogin where username='"+usertxt.getText().toString()+"' and password='"+passtxt.getText().toString()+"';");
            if(rs.next()){
                logged=rs.getString(1);
                loggedid=rs.getString(2);
                Toast.makeText(getContext(),"Welcome "+rs.getString(1),Toast.LENGTH_LONG).show();
                Intent intent = new Intent(doctor_login.this.getActivity(),doctor_home.class);
                startActivity(intent);
            } else
            {
                Snackbar.make(getView(),"Wrong Username or password",Snackbar.LENGTH_LONG).setAction("Action",null).show();
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
            Toast.makeText(getContext(),e.toString(),Toast.LENGTH_LONG).show();
        }
}

}

使用 alertdialog 更改 ip查看 editetxt__Screenshot

当尝试从 doctor_login 页面登录时,它显示连接异常,因为即使更改了 ip,您也可以看到它尝试连接的 ip

例外__截图

戴维xxx

这里 :

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState)
{
    final View rootView = inflater.inflate(R.layout.activity_doctor_login, container, false);
    url ="jdbc:mysql://"+MainActivity.ip+":3306/mediapp";  //getting value from mainactivity ip value 

doctor_login片段是在 ip 更改之前创建的MainActivity
这个评估不是在方便的地方,因为url将使用MainActivity.ip初始化期间存在值,并且不会考虑用户在 中执行的 ip 更改MainActivity

要解决您的问题,请使用testDB()方法中的 IP 生成 url

代替

public void testDB(){
    Toast.makeText(getContext(),url,Toast.LENGTH_LONG).show();

经过

public void testDB(){
     url ="jdbc:mysql://"+MainActivity.ip+":3306/mediapp";  
    Toast.makeText(getContext(),url,Toast.LENGTH_LONG).show();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

访问Java中的其他方法变量?

来自分类Dev

从其他脚本访问变量

来自分类Dev

从其他类访问变量?

来自分类Dev

访问其他表单变量

来自分类Dev

从其他文件访问变量

来自分类Dev

如何在Perl中设置类似Java的“静态变量”,其他类可以访问该静态变量?

来自分类Dev

如何在Java中的其他类中访问方法的变量?

来自分类Dev

访问远程服务器/其他网站时,如何在Processing / Java中使用loadStrings?

来自分类Dev

访问其他Java类中的文件?

来自分类Dev

访问其他Java类中的文件?

来自分类Dev

访问其他类的对象java

来自分类Dev

Android:从其他活动访问线程

来自分类Dev

无法访问其他类的字符串?

来自分类Dev

如何从其他方法访问字符串?

来自分类Dev

访问Angular中其他组件的变量

来自分类Dev

从其他类访问变量(C ++)

来自分类Dev

如何从其他方法访问变量

来自分类Dev

从Unity中的其他场景访问变量

来自分类Dev

访问其他主机的字典变量

来自分类Dev

如何访问其他类中的变量

来自分类Dev

C ++从其他函数访问变量

来自分类Dev

Ansible:如何访问其他主机的变量?

来自分类Dev

从Fragment访问其他Fragment变量或元素

来自分类Dev

在其他函数中访问变量

来自分类Dev

其他游戏中的访问变量 - Ansible

来自分类Dev

Java Android开发:引用其他类的静态字符串获取Intent参数是一种不好的做法吗?

来自分类Dev

使用字符串(C#)从其他脚本访问变量的值

来自分类Dev

如何从其他进程访问全局静态变量

来自分类Dev

静态变量不能被其他类访问