Android 如何从连接检索数据并保存到';共享首选项';?

Android 如何从连接检索数据并保存到';共享首选项';?,android,Android,正如标题所说,我试图从连接中检索数据,并将数据(只是一些值)保存到 如果我使用方法测试并运行,则连接可以工作,但如果我使用onCreate()事件调用代码,则连接在应用程序中不工作。它不会保存数据,并且始终为空 sharedPref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); SharedPreferences.Editor=sharedPref.edit(); 试一试{ 字符串链接=“…”; U

正如标题所说,我试图从连接中检索数据,并将数据(只是一些值)保存到

如果我使用方法测试并运行,则连接可以工作,但如果我使用onCreate()事件调用代码,则连接在应用程序中不工作。它不会保存数据,并且始终为空

sharedPref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor=sharedPref.edit();
试一试{
字符串链接=“…”;
URL=新的URL(链接);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“GET”);
int responseCode=conn.getResponseCode();
如果(响应代码==200){
BufferedReader BufferedReader=新的BufferedReader(新的InputStreamReader(
(conn.getInputStream());
字符串输出,totalString=“”;
而((output=bufferedReader.readLine())!=null){
totalString+=输出;
}
Log.d(标记,totalString);
com.google.gson.JsonObject JsonObject=new JsonParser().parse(totalString)
.getAsJsonObject();
字符串时间=jsonObject.getAsJsonObject(“数据”).getAsJsonObject(“计时”)
.get(“Fajr”).getAsString();
Log.d(标签“Fajr:+时间);
编辑器.putString(“key_fajr”,time);
editor.apply();
}
}捕获(例外e){
Log.e(标记,e.toString());
}
我用于检索数据的代码:

sharedPref=PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
String value=sharedPref.getString(“key_fajr”,null);
例外情况:

java.io.IOException: Cleartext HTTP traffic to api.aladhan.com not permitted

我希望它能从连接中获取数据,并将其保存在应用程序内的共享首选项中。

创建编辑器和首选项

private var preferences: SharedPreferences? = null
private var editor: SharedPreferences.Editor? = null
preferences = activity!!.getSharedPreferences("key_fajr", Context.MODE_PRIVATE)
//In fragment
//preferences = getActivity()!!.getSharedPreferences("key_fajr",     Context.MODE_PRIVATE)
editor = preferences!!.edit()
初始化编辑器和首选项

private var preferences: SharedPreferences? = null
private var editor: SharedPreferences.Editor? = null
preferences = activity!!.getSharedPreferences("key_fajr", Context.MODE_PRIVATE)
//In fragment
//preferences = getActivity()!!.getSharedPreferences("key_fajr",     Context.MODE_PRIVATE)
editor = preferences!!.edit()
保存数据

editor!!.putString("email", mEtEmail!!.text.toString())
editor!!.commit()
preferences!!.getString("email", "")
加载数据

editor!!.putString("email", mEtEmail!!.text.toString())
editor!!.commit()
preferences!!.getString("email", "")
既然我找到了,我就把它写在这里,供将来的程序员使用

问题是我使用的是Android 9,它是

从Android 9(API级别28)开始,默认情况下禁用明文支持

这就是为什么在我的案例中出现以下异常:

java.io.IOException: Cleartext HTTP traffic to url not permitted
另外,这与共享偏好无关。一切都在按预期进行

解决 只需在AndroidManifest.xml中添加这一行


...

您是否在清单中声明了INTERNET权限?我看到您有日志。这里有什么问题?连接是否不工作或值是否未保存在SharedReferences中?您的
Log.d(标记“Fajr:+time”)显示什么?也。。。你什么时候在读SharedRef?我建议使用
getApplicationContext().getSharedReferences(TAG,Context.MODE\u PRIVATE)
提交()而不是
apply()@Ezio是的,我做到了!