如果用户输入错误的密码或用户名,我想显示一条消息。
这是接受值的类
public class Login extends Activity {
Button submit_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
submit_login = (Button) findViewById(R.id.submit_login);
submit_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub.
EditText usr_number = (EditText) findViewById(R.id.username);
EditText password_main = (EditText) findViewById(R.id.password);
String username = usr_number.getText().toString();
String password = password_main.getText().toString();
String[] Loginvalues = {username,password};
new CheckUsername().execute(Loginvalues);
}
});
}
}
现在在 new CheckUsername().execute(Loginvalues) 之后;这个电话我想在 TextView 中显示一条消息(id = loginStatus)
public class CheckUsername extends AsyncTask<String, Integer, String[]> {
HttpClient Client;
JSONObject json;
final static String URL = "someurl";
@Override
protected String[] doInBackground(String... params) {
// TODO Auto-generated method stub
String username = params[0].toString();
String password = params[1].toString();
Client = new DefaultHttpClient();
try {
json = ValidateUsername(username, password);
String status = json.getString("status");
if (status.equals("ok")) {
System.out.println(json.getString("response"));
JSONObject user_values = new JSONObject(json.getString("user"));
GlobalVariables newObj = new GlobalVariables();
newObj.setUserId(user_values.getString("id"));
newObj.setUserName(user_values.getString("name"));
System.out.println(newObj.getUserId());
System.out.println(newObj.getUserName());
} else {
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public JSONObject ValidateUsername(String username, String password)
throws ClientProtocolException, IOException, JSONException {
StringBuilder url = new StringBuilder(URL);
HttpPost post = new HttpPost(url.toString());
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("token", "ABCD"));
nameValuePairs.add(new BasicNameValuePair("func_name",
"validate_user"));
nameValuePairs.add(new BasicNameValuePair("username", username));
nameValuePairs.add(new BasicNameValuePair("password", password));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
// Execute HTTP Post Request
HttpResponse response = Client.execute(post);
int status = response.getStatusLine().getStatusCode();
if (status == 200) {
HttpEntity e = response.getEntity();
String data = EntityUtils.toString(e);
JSONObject statusValue = new JSONObject(data);
return statusValue;
} else {
System.out.println(status);
return null;
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
}
status.equals("ok") 这是让我们知道是否登录的标识符
谢谢
最佳答案
看来您可能误解了 AsyncTask
的功能,或者只是没有深入了解它。一个重要的澄清是 AsyncTask
不是 Activity
。了解什么是 Activity
以及如何使用它与 UI 进行交互很重要(它是少数几个可以让您这样做的类之一)。
帮助解决你的问题,而不是有一个单独的类,只需将你的 AsyncTask
作为你的主类的内部类。
public class Login extends Activity {
// Your code like onCreate and stuff
public class CheckUsername extends AsyncTask<String[], Void, String> {
// do your async task stuff
}
}
扩展你的AsyncTask
,在你完成后台操作后,你可以通过onPostExecute()
将数据返回给你的类
public class CheckUsername extends AsyncTask<String[], Void, String> {
@Override
protected String doInBackground(String[]... params) {
//... do your stuff
return statusValue;
}
@Override
protected void onPostExecute(String statusValue) {
setText(statusValue);
}
}
在你的主类中,有一个像setText
这样的方法,它允许你根据需要处理你的返回值
public void setText(String return) {
if (return.equals("ok") { // or whatever it is supposed to equal if it's ok
// set your text to whatever, you are ok
}
else {
// set your text to whatever, bad password
}
}
简而言之,AsyncTask
背后的设计思想是
public class AsyncTaskName extends AsyncTask<IN_PARAMETER, PROGRESS_PARAMETER, RETURN_PARAMETER> {
@Override
protected RETURN_PARAMETER doInBackground(IN_PARAMETER... params) {
// do your stuff
return (variable of type RETURN_PARAMETER);
}
@Override
protected void onProgressUpdate(PROGRESS_PARAMETER... progress) {
// do your stuff
}
@Override
protected void onPostExecute(RETURN_PARAMETER returnParam) {
// interact with your UI, like calling a method from your activity
}
}
值得注意的是,任务通常不需要onProgressUpdate
,除非您想直接通知用户您的AsyncTask
的更新进度。
AsyncTasks 旨在脱离 UI 执行操作,但仍然能够轻松地与之交互。 doInBackground 方法告诉 AsyncTask 我们希望从 UI 线程完成它,但是 onPostExecute 告诉我们我们已经完成,关闭我们的线程并返回我们的数据。就 UI 交互而言,如果没有 onPostExecute,您将死死地漂浮在水中。您不必从 onPostExecute 调用方法并且可以直接使用 UI(如 textView.setText(returnValue);),但使用方法可以更清楚地表明工作是由 Activity 而不是 AsyncTask 本身完成的。
关于java - 将值从一个 Activity 返回到另一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23957745/