gpt4 book ai didi

java - 如何在获取字符串结果后停止 上扩展的类的 onPostExecute() ?

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:27 27 4
gpt4 key购买 nike

我正在使用连接到在线数据库的 Android 应用程序的登录系统。如果我要显示 onPostExecute() 提供的结果,它可以工作,但如果我要把它放在条件语句上来做某事,它就不起作用;或者我应该说,它正在发挥作用,但它正在无限地发挥作用。

获取字符串结果后如何停止执行onPostExecute?

无论如何,这是我的代码:

登录.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
}

}
}

连接器.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);
}

}

}

最佳答案

如果我是对的,我认为这与您的监听器有关,您永远不会在 onPostExecute 方法中向监听器返回 false 或 true ,但您会在登录 Activity 中检查 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 字符串

关于java - 如何在获取字符串结果后停止 <AsyncTask> 上扩展的类的 onPostExecute() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33835592/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com