Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences未读取数据_Java_Android_Sharedpreferences_Preferences - Fatal编程技术网

Java SharedReferences未读取数据

Java SharedReferences未读取数据,java,android,sharedpreferences,preferences,Java,Android,Sharedpreferences,Preferences,我正在保存两部分数据:用户密码和用户名,以便在以后的数据中使用,以及随机组合的字母,以便在再次执行应用程序时进行检查,以避免再次出现登录屏幕 我昨天做了这个,出于某种原因,我想我在添加一个特性时把代码放错了地方,现在无法让它再次工作,我已经尝试了一整天来修复它,但我做不到 EDIT1:由于某种原因,它转到“CheckPrefs”方法的else语句,我无法理解。 EDIT2:它可以很好地保存首选项并转到意图,但是它无法读取它 代码: publicstaticfinalstringprefs\u N

我正在保存两部分数据:用户密码和用户名,以便在以后的数据中使用,以及随机组合的字母,以便在再次执行应用程序时进行检查,以避免再次出现登录屏幕

我昨天做了这个,出于某种原因,我想我在添加一个特性时把代码放错了地方,现在无法让它再次工作,我已经尝试了一整天来修复它,但我做不到

EDIT1:由于某种原因,它转到“CheckPrefs”方法的else语句,我无法理解。

EDIT2:它可以很好地保存首选项并转到意图,但是它无法读取它

代码:

publicstaticfinalstringprefs\u NAME=“MyPregs”;
公共静态最终字符串PREFS\u CHECK=“CheckSignedIn”;
公共静态最终字符串UID=“”;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
CheckPrefs();
//单击登录按钮
ok=(按钮)findViewById(R.id.btn\u登录);
好的,setOnClickListener(这个);
结果=(TextView)findViewById(R.id.lbl_结果);
} 
私有void CheckPrefs(){
//TODO自动生成的方法存根
//检查用户之前是否登录过,如果他们有,则从SharedReferences获取数据,并通过HttpPost检查我们的数据库。
SharedReferences设置=获取SharedReferences(首选项检查,0);
String SCheck1=settings.getString(“key4”,null);
if(SCheck1!=null&&equals(UID)){
Intent c=新Intent(这是CheckUserInfo.class);
星触觉(c);
}否则{
}
}
//创建括号。
public void postloginanda(){
//创建一个新的HttpClient和Post头
HttpClient HttpClient=新的DefaultHttpClient();
/*如果用户名和密码等于saranga,login.php将返回true*/
HttpPost HttpPost=新的HttpPost(“http://gta5news.com/login.php");
试一试{
//添加用户名和密码
uname=(EditText)findViewById(R.id.txt_用户名);
字符串username=uname.getText().toString();
pword=(EditText)findViewById(R.id.txt_密码);
字符串密码=pword.getText().toString();
SharedReferences signedin=GetSharedReferences(首选项检查,0);
SharedReferences.Editor编辑器1=signedin.edit();
editor1.putString(“key4”,UID);
editor1.commit();
SharedReferences设置=GetSharedReferences(首选项名称,0);
SharedReferences.Editor=settings.edit();
editor.putString(“key1”,用户名);
编辑器.putString(“键2”,密码);
commit();
List nameValuePairs=新的ArrayList(2);
添加(新的BasicNameValuePair(“用户名”,username));
添加(新的BasicNameValuePair(“密码”,password));
setEntity(新的UrlEncodedFormEntity(nameValuePairs));
//执行HTTP Post请求
w(“HttpPost”,“执行HttpPost请求”);
HttpResponse response=httpclient.execute(httppost);
字符串str=inputStreamToString(response.getEntity().getContent())
.toString();
Log.w(“HttpPost”,str);
if(str.toString().equalsIgnoreCase(“true”)){
Log.w(“HttpPost”、“TRUE”);
result.setText(“登录成功”);
试试{Thread.sleep(250);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
Intent login=newintent(login.this,ChatService.class);
startActivity(登录);
}否则{
Log.w(“HttpPost”、“FALSE”);
结果:setText(str);
}
}捕获(客户端协议例外e){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}
}
私有StringBuilder inputStreamToString(InputStream为){
字符串行=”;
StringBuilder总计=新StringBuilder();
//在InputStream周围包装一个BufferedReader
BufferedReader rd=新的BufferedReader(新的InputStreamReader(is));
//读取响应直到结束
试一试{
而((line=rd.readLine())!=null){
合计.追加(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}
//返回完整字符串
返回总数;
}
公共void onClick(视图){
如果(视图==ok){
postloginanda();
InputMethodManager imm=(InputMethodManager)getSystemService(Context.INPUT\u方法\u服务);
imm.hideSoftInputFromWindow(pword.getWindowToken(),0);
}
//单击结束
}
//if语句
}
//课程到此结束

需要查看您的首选项保存位置,以便我们可以将其与您调用首选项的方式相匹配。。。但是,这是打字错误吗

public static final String PREFS_NAME = "MyPregs"; 
它应该是“MyPrefs”而不是“MyPregs”?

if (SCheck1 != null  && equals(UID))
但是你可能是想说

if (SCheck1 != null  && !SCheck.equals(UID))

您也可以使用“反向比较”模式:

if (UID.equals(SCheck1)) {

} else {

}

这样,您就不必费心检查SCheck1==null。UID.equals(null)将返回false,而不是null.equals(UID)抛出NullPointerException。

如果(SCheck1!=null&&equals(UID))?总是弄虚作假怎么办?在我看来,这似乎是一个正确的说法。试图得到澄清。如果我错了,请纠正我:您想从shared pref中提取key4值,如果key4的值与常量UID匹配,您想进入if语句吗?是吗?是的,是的,一旦我修好了这个,我就要改变它。不是吗?我想要
if (UID.equals(SCheck1)) {

} else {

}