当前位置: 首页 > 知识库问答 >
问题:

Android-来自AlertDialog的字符串值在访问时不断重置

淳于知
2023-03-14

我遇到了一个问题,即使在AlertDialog片段中输入了数据,我输入的字符串仍然重置为空。假设我将数据输入到EditText对象中,将它存储在一个字符串变量中,在我的Getter/Setter类中将它设置为字符串值,然后在我的片段中从该类中检索。

AlertDialog的图像

AlertDialog片段

import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;

import org.ramferno.scoutapplication.ramfernoscout.R;
import org.ramferno.scoutapplication.ramfernoscout.providers.AddressProvider;

public class AddressDialogFragment extends DialogFragment {
    AddressProvider addressProvider = new AddressProvider();
    EditText enterIP;
    String urlAddress;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Declare and initialize objects
        LayoutInflater i = getActivity().getLayoutInflater();
        View v = i.inflate(R.layout.fragment_dialog, null);
        enterIP = (EditText) v.findViewById(R.id.enterIP);

        //Create AlertDialog
        AlertDialog.Builder b = new AlertDialog.Builder(getActivity())
                .setTitle("Enter IP Address")
                .setPositiveButton("ADD",
                        new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int whichButton) {
                                urlAddress = enterIP.getText().toString();
                                addressProvider.setAddress(urlAddress);
                            } //End of onClick
                        }) //End of DialogInterface
                .setNegativeButton("Cancel",
                        new DialogInterface.OnClickListener() {
                           public void onClick(DialogInterface dialog, int whichButton) {
                                dialog.cancel();
                            } //End of onClick
                        } //End of DialogInterface
                ); //End of AlertDialog
        b.setView(v);
        return b.create();
    } //End of onCreateDialog
} //End of class

Getter/Setter类

public class AddressProvider {
    private String urlAddress;

    public String getAddress() {
        return urlAddress;
    } //End of getAddress

    public void setAddress(String urlAddress) {
        this.urlAddress = urlAddress;
    } //End of setAddress
} //End of class

ScoutFragment(从Getter/Setter接收字符串的片段)

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;

import org.ramferno.scoutapplication.ramfernoscout.downloaders.Downloader;
import org.ramferno.scoutapplication.ramfernoscout.R;
import org.ramferno.scoutapplication.ramfernoscout.providers.AddressProvider;

//Start of ScoutFragment
public class ScoutFragment extends Fragment {
    //Declares Android UI objects
    AddressProvider addressProvider = new AddressProvider();
    FloatingActionButton addDataScout;
    ListView eListScoutInfo;
    String IP = addressProvider.getAddress();

    //Declare and initialize variable
    String urlAddress = "http://" + IP + "/ramfernoscout/matchdb/matchretrieve.php";

    public ScoutFragment() {
        // Required empty public constructor
    } //End of ScoutFragment

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //Inflates layout for this fragment
        View view = inflater.inflate(R.layout.fragment_scout, null, false);

        //Instantiate ListView object with the xml ListView object
        eListScoutInfo = (ListView) view.findViewById(R.id.listScoutInfo);

        //Add instructions to the Refresh FAB that will download the data from the database server
        FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab2);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Downloader d = new Downloader(getActivity(),urlAddress,eListScoutInfo);
                d.execute();
            } //End of onClick
        }); //End  of setOnClickListener

        //Change fragment to AddScoutDataFragment with animations
        addDataScout = (FloatingActionButton) view.findViewById(R.id.fab);
        addDataScout.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                AddScoutDataFragment fragment = new AddScoutDataFragment();
                FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
                fragmentTransaction.setCustomAnimations(R.anim.enter_from_right,
                        R.anim.exit_to_left, R.anim.enter_from_left, R.anim.exit_to_right);
                fragmentTransaction.replace(R.id.fragment_container, fragment);
                fragmentTransaction.commit();
            } //End of onClick
        }); //End of setOnClickListener

        //Returns view
        return view;
    } //End of onCreateView
} //End of class

共有1个答案

萧琛
2023-03-14

您正在使用 AddressProvider addressProvider = new AddressProvider();ScoutFragmentAddressDialogFragment 中。

new运算符将创建AddressProvider类的新实例。如果要持久化数据,则应仅创建AddressProvider的单个实例。因此,您应该将AddressProvider设为SingleTon类。

public class AddressProvider {
    private static AddressProvider ourInstance = new AddressProvider();
    private String urlAddress;

    private AddressProvider() {
    }

    public static AddressProvider getInstance() {
        return ourInstance;
    }

    public String getAddress() {
        return urlAddress;
    }

    public void setAddress(String urlAddress) {
        this.urlAddress = urlAddress;
    }
}

用法

要存储 IP,

AddressProvider.getInstance().setAddress("xxx.xxx.xx.xx");

要检索,

AddressProvider.getInstance().getAddress()
 类似资料:
  • 问题内容: 我想基于我的字符串更改imageview src,我有这样的东西: 当然不行。如何以编程方式更改图像? 问题答案: 用: 注意:不要使用扩展名(例如,“。jpg”)。 示例:图像为“ abcd_36.jpg”

  • 我现在正在使用bash shell脚本测试一些restful API。我想从文件中读取url,然后用文件中的url创建一个json数据字符串。对于测试,下面的代码工作良好。它不是从文件读取的。 非法的无引号字符((CTRL-CHAR,代码13)):必须使用反斜杠转义才能包含在[source:org.apache.catalina.connector.CoyoteInputStream@27eb67

  • 我想在使用AlertDialog时使用android插件库中的自定义字体。下面是使用自定义字体显示警报对话框的代码。 我收到错误: 我已将字体文件放在Unity的“资产/资源”文件夹中。因此,在最终apk中,字体资源显示在“资产/字体”文件夹中。但是,这并不重要,因为我可以在其他文本视图中使用自定义字体。 唯一的问题是,我相信它找不到AlertDialog的消息和标题。任何帮助都将不胜感激。

  • 本文向大家介绍Java程序访问字符串字符,包括了Java程序访问字符串字符的使用技巧和注意事项,需要的朋友参考一下 要在Java中访问字符串的字符,请使用方法。该位置将作为参数添加。 假设我们有以下字符串- 让我们使用method在第4个位置找到字符。 以下是最后一个示例。 示例 输出结果

  • 我正在使用HttpPost向服务器发送一个字符串。这个字符串是一个JSONObject,我之前已经将其转换为字符串,到目前为止,一切都正常工作。。。发送内容类型必须为“application/json”。 要发送它,将我的String转换为StringEntity并添加到httpPost.setEntity(my_string)...问题是服务器告诉我不识别数据(准备接收转换为String的JSO

  • 一个api给我发送base64字符串,表示有一个图像。我有一个函数将这个字符串传输到blob存储。 当我用atob(b64Data)转换字符串时,出现以下错误: 如何用JavaScript解码?我尝试我的字符串与在线转换器(从base64到image)和工作良好。 谢谢