我想创建一个Android应用程序,当应用程序的用户单击按钮时,它应该转到RaspBerry PI的IP地址。此Pi位于网络本身并具有静态IP,但应由用户指定一次。
我有一个TextField,用户可以在其中输入Pi的IP地址。这应该存储在SharedPreferences中。以下是此部分的代码:
public void save(View view) {
editor.putString("homeIP", textHomeIP.getText().toString());
editor.commit();
editor.putString("PiIP", textPiIP.getText().toString());
editor.commit();
piIP = textPiIP.getText().toString();
homeIP = textHomeIP.getText().toString();
makeURL();
Toast.makeText(getApplication(), "Saved", Toast.LENGTH_SHORT);
finish();
}
单击保存按钮时会运行此方法。该类扩展了MainActivity,并在单击设置按钮时使用设置xml打开。由于某些原因,在MainActivity中无法更改URL。这是更改网址
的方法protected void makeURL()
{
if(mSocket != null)
{
mSocket.disconnect();
}
try
{
url = new URL("http://" + piIP);
Log.d("URL", url.toString());
}
catch (java.net.MalformedURLException e) {}
try
{
mSocket = IO.socket(url.toString(), opts);
}
catch (java.net.URISyntaxException e)
{
Log.d("ERROR", "Cant initialize socket: " + e.toString());
}
mSocket.connect();
mSocket.on("detection-start", detectionStart);
mSocket.on("detection-end", detectionEnd);
}
套接字实际连接但由于某种原因URL保持不变。我在onCreate中运行此方法并在此之前启动piIP。
这里是onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ipActivity = new IPActivity();
ipActivity.execute();
setContentView(R.layout.content_main);
notificationSettings();
//connectionChanger = new ConnectionChangeReceiver();
sharedPref = this.getPreferences(Context.MODE_PRIVATE);
//sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
editor = sharedPref.edit();
homeIP = sharedPref.getString("homeIP", "localhost");
piIP = sharedPref.getString("PiIP", "localhost");
Log.d("Pi IP", piIP);
makeURL();
}
最后这里是openBrowser()方法
public void openBrowser(View view)
{
makeURL();
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url.toString()));
startActivity(browserIntent);
}
有人可以告诉我为什么在保存设置时不会更改网址?
答案 0 :(得分:0)
事实证明我使用的是getPreferences而不是getSharedPreferences。它解决了创建URL的问题。我自己创建了子类,让de ip地址通过getSharedPreferences加载。