Статические функции Android
Мне интересно, как я могу получить доступ к инструкции возврата с помощью статической функции. У меня есть статическая функция с Async, и я хочу затем получить оператор return в другом классе - я знаю, это звучит сложно, но я уверен, что это простое решение.
Login.class
public class LogIn extends Activity {
Button login;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
TextView top = (TextView) findViewById(R.id.textView2);
final EditText user = (EditText) findViewById(R.id.etUser);
final EditText pass = (EditText) findViewById(R.id.etPass);
CheckBox stay = (CheckBox) findViewById(R.id.cBStay);
Button login = (Button) findViewById(R.id.btLogin);
login.setOnClickListener( new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
String user1 = user.getText().toString();
String pass1 = pass.getText().toString();
if(user1 !=null &user1.length()>=1 & pass1 !=null &pass1.length()>=1) {
ComHelper.SendLogin(user1, pass1);
}
}
});
}
}
ComHelper.class
public class ComHelper extends AsyncTask<String, Void, String> {
static String adress ="http://gta5news.com/login.php";
String user;
String pass;
public static boolean SendLogin(String user1, String pass1){
String user = user1.toString();
String pass = pass1.toString();
new ComHelper().execute(user1, pass1, adress);
return true;
}
private static StringBuilder inputStreamToString(InputStream is) {
String line = "";
StringBuilder total = new StringBuilder();
// Wrap a BufferedReader around the InputStream
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
// Read response until the end
try {
while ((line = rd.readLine()) != null) {
total.append(line);
}
} catch (IOException e) {
e.printStackTrace();
}
// Return full string
return total;
}
@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
InputStream inputStream = null;
HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(adress);
try {
/*Add some data with NameValuePairs */
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("user", user));
nameValuePairs.add(new BasicNameValuePair("password", pass));
post.setEntity(new UrlEncodedFormEntity(nameValuePairs));
/*Execute */
HttpResponse response = httpclient.execute(post);
String str = inputStreamToString(response.getEntity().getContent())
.toString();
Log.w("HttpPost", str);
if (str.toString().equalsIgnoreCase("true"))
return str;
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
}
return null;
}
}
Теперь я хочу увидеть, если ComHelper.SendLogin()
вернул true / или хотя бы что-то вернул.
РЕДАКТИРОВАТЬ: Когда код выполняется ничего не происходит, я думаю, это потому, что я ничего не делаю с оператором возврата.
2 ответа
Если вы хотите посмотреть значение, вам нужно сохранить возвращаемое значение метода в локальной переменной
if(user1 !=null && user1.length() > 0 && pass1 !=null && pass1.length() > 0)
{
boolean comLogin = ComHelper.SendLogin(user1, pass1);
if(comLogin)
{
//do something
}
}
Вы хотите реализовать
protected void onPostExecute (Result result)
на вашей реализации AsyncTask. Параметр результата будет тем, что вы возвращаете из метода doInBackground. Так как это выполняется в потоке пользовательского интерфейса, вы можете изменить пользовательский интерфейс, как вы хотите в то время.