我正在使用连接到在线数据库的我的Android应用程序的登录系统。如果我要显示onPostExecute()提供的结果,它会起作用,但是如果我要把它放在条件语句上做某事,它就不起作用了;或者我应该说,它在起作用,但它无限制地工作。
如何在获取字符串结果后停止执行onPostExecute?
无论如何,这是我的代码:
的login.php
package com.example.navigationdrawerexample;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Login extends Activity implements OnClickListener, Connector.OnPostExecuteListener{
EditText studnum;
EditText pass;
Button login;
Button reg;
TextView errorlog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
studnum = (EditText) findViewById(R.id.studnum);
pass = (EditText) findViewById(R.id.password);
login = (Button) findViewById(R.id.login);
reg = (Button) findViewById(R.id.register);
errorlog = (TextView) findViewById(R.id.errorlog);
login.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (arg0.getId() == R.id.login){
ConnectivityManager conv = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = conv.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!(mWifi.isConnected())){
Toast.makeText(this, "Enable your internet connection first!", Toast.LENGTH_LONG).show();
} else {
String student_num = studnum.getText().toString();
String password = pass.getText().toString();
Connector connect= new Connector(this,0,"authenticate",0,0,0,student_num,password);
connect.setOnPostExecuteListener(this);
connect.execute("");
}
}
}
@Override
public void onPostExecute(String result) {
// TODO Auto-generated method stub
if (result == "false"){
errorlog.setText("Incorrect login information..");
} else if (result == "true"){
Intent goToLogInMod = new Intent("com.example.navigationdrawerexample.MAINACTIVITY");
startActivity(goToLogInMod); //para pumunta sa login module
}
}
}
Connector.php 如果您注意到一些没用的构造函数参数,请忽略它:)
package com.example.navigationdrawerexample;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.net.URL;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class Connector extends AsyncTask<String,Void,String>{
private OnPostExecuteListener onPostExecuteListener;
private Context context;
private int collegeactive;
private String flag;
private int spec_art;
private String response;
private int month;
private int yr;
private String username;
private String password;
public Connector(Context context,int college, String flag,int spec_art,int month, int yr,String username, String password){
this.context = context;
this.collegeactive = college;
this.flag = flag;
this.spec_art = spec_art;
this.yr = yr;
this.month = month;
this.username = username;
this.password = password;
}
public interface OnPostExecuteListener {
void onPostExecute(String result);
}
public void setOnPostExecuteListener(OnPostExecuteListener listener){
this.onPostExecuteListener = listener;
}
protected void onPreExecute(){
if (flag == "authenticate"){
Toast.makeText(context, "Please wait...", Toast.LENGTH_LONG).show();
}
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try{
String link = "";
if (flag == "headline"){
link = "http://rtu-astronet.com/emag/functions.php?action=printHeadline&coll_id="+collegeactive;
} else if (flag == "list"){
link = "http://rtu-astronet.com/emag/functions.php?action=printArticlePerCollege&collegeid="+collegeactive+"&acadornot=1";
} else if (flag == "spec_article"){
link = "http://rtu-astronet.com/emag/functions.php?action=printSpecificArticle&articleid="+spec_art;
} else if (flag == "permonth"){
link = "http://rtu-astronet.com/emag/functions.php?action=printArticlePerMonth&month="+month+"&year="+yr+"&acadornot=1";
} else if (flag == "authenticate"){
link = "http://rtu-astronet.com/emag/functions.php?action=checkAccount&username="+username+"&password="+password;
}
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
while ((line = in.readLine()) != null) {
sb.append(line);
//break;
}
in.close();
return sb.toString();
} catch(Exception e){
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
if (flag != "authenticate"){
result = "{ \n \"Data\": \n " + result + " \n }";
}
if(onPostExecuteListener !=null){
onPostExecuteListener.onPostExecute(result);
}
}
}
答案 0 :(得分:0)
如果我是对的,我认为它是关于你的监听器,你永远不会在onPostExecute方法中向你的监听器返回false或true,但是你在登录活动中检查true或false值。 我跳了它帮助
你的AsyncTask中的:
protected void onPostExecute(String result) {
if (flag != "authenticate"){
result = "{ \n \"Data\": \n " + result + " \n }";
}
if(onPostExecuteListener !=null){
onPostExecuteListener.onPostExecute(result);
}
}
并且您在登录时检查字符串是否为true或false string
答案 1 :(得分:0)
创建名为OnPostExecuteListener的类文件
public interface OnPostExecuteListener { public void onPostExecute(String result); }
实现上面创建的界面。
package com.example.navigationdrawerexample;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class Login extends Activity implements OnClickListener, OnPostExecuteListener {
EditText studnum;
EditText pass;
Button login;
Button reg;
TextView errorlog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
studnum = (EditText) findViewById(R.id.studnum);
pass = (EditText) findViewById(R.id.password);
login = (Button) findViewById(R.id.login);
reg = (Button) findViewById(R.id.register);
errorlog = (TextView) findViewById(R.id.errorlog);
login.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (arg0.getId() == R.id.login) {
ConnectivityManager conv = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mWifi = conv.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (!(mWifi.isConnected())) {
Toast.makeText(this, "Enable your internet connection first!", Toast.LENGTH_LONG).show();
} else {
String student_num = studnum.getText().toString();
String password = pass.getText().toString();
Connector connect = new Connector(Login.this, 0, "authenticate", 0, 0, 0, student_num, password);
connect.execute("");
}
}
}
// this method provides you the result of onPost execute;
@Override
public void onPostExecute(String result) {
// TODO Auto-generated method stub
if (result == "false") {
errorlog.setText("Incorrect login information..");
} else if (result == "true") {
Intent goToLogInMod = new Intent("com.example.navigationdrawerexample.MAINACTIVITY");
startActivity(goToLogInMod); // para pumunta sa login module
}
}
}
连接器类
public class Connector extends AsyncTask<String, Void, String> {
private OnPostExecuteListener onPostExecuteListener;
private Context context;
private int collegeactive;
private String flag;
private int spec_art;
private String response;
private int month;
private int yr;
private String username;
private String password;
public Connector(Context context, int college, String flag, int spec_art, int month, int yr, String username,
String password) {
this.context = context;
this.collegeactive = college;
this.flag = flag;
this.spec_art = spec_art;
this.yr = yr;
this.month = month;
this.username = username;
this.password = password;
}
protected void onPreExecute() {
if (flag == "authenticate") {
Toast.makeText(context, "Please wait...", Toast.LENGTH_LONG).show();
}
onPostExecuteListener = (OnPostExecuteListener) context;
}
@Override
protected String doInBackground(String... arg0) {
// TODO Auto-generated method stub
try {
String link = "";
if (flag == "headline") {
link = "http://rtu-astronet.com/emag/functions.php?action=printHeadline&coll_id=" + collegeactive;
} else if (flag == "list") {
link = "http://rtu-astronet.com/emag/functions.php?action=printArticlePerCollege&collegeid="
+ collegeactive + "&acadornot=1";
} else if (flag == "spec_article") {
link = "http://rtu-astronet.com/emag/functions.php?action=printSpecificArticle&articleid=" + spec_art;
} else if (flag == "permonth") {
link = "http://rtu-astronet.com/emag/functions.php?action=printArticlePerMonth&month=" + month
+ "&year=" + yr + "&acadornot=1";
} else if (flag == "authenticate") {
link = "http://rtu-astronet.com/emag/functions.php?action=checkAccount&username=" + username
+ "&password=" + password;
}
URL url = new URL(link);
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(link));
HttpResponse response = client.execute(request);
BufferedReader in = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer sb = new StringBuffer("");
String line = "";
while ((line = in.readLine()) != null) {
sb.append(line);
// break;
}
in.close();
return sb.toString();
} catch (Exception e) {
return new String("Exception: " + e.getMessage());
}
}
@Override
protected void onPostExecute(String result) {
if (flag != "authenticate") {
result = "{ \n \"Data\": \n " + result + " \n }";
}
if (onPostExecuteListener != null) {
onPostExecuteListener.onPostExecute(result);
}
}
}