Java: Как запустить поток повторно на android?
Java я знаю нормально. Но android приложения начал учится делать недели 2 назад. Уже сделал несколько activity, и начал делал авторизацию. Но, есть проблема, когда я ввожу верные логин и пароль, меня пускает дальше. Если я ошибусь в логине или пароле, то мне выведет ошибку, я введу верный логин и пароль. А ничего и не происходит, то есть поток в котором у меня запрос к http, не запускается повторно.
Простите за код, он очень корявый и детский.
Layout не важен.
Вот код
package com.tut.moy.package;
import android.app.*;
import android.content.*;
import android.os.*;
import android.view.*;
import android.widget.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class LoginActivity extends Activity
{
Button buttonLogin, register;
EditText inputLogin, inputPassword;
TextView StatusType, StatusMessage;
LinearLayout StatusBar;
ProgressDialog progressDialog;
private Intent Intent = new Intent();
Handler handler = new Handler();
Handler interval = new Handler();
static ArrayList<String> html = new ArrayList<String> (1000);
private String response = "none";
private Boolean RepResponse = false, started = false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
buttonLogin = findViewById(R.id.buttonLogin);
register = findViewById(R.id.register);
inputLogin = findViewById(R.id.email);
inputPassword = findViewById(R.id.password);
StatusBar = findViewById(R.id.StatusBar);
StatusType = findViewById(R.id.Status);
StatusMessage = findViewById(R.id.StatusMessage);
progressDialog = new ProgressDialog(this);
register.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent.setClass(getApplicationContext(), RegisterActivity.class);
startActivity(Intent);
finish();
}
});
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(response != "sended"){
response = "sended";
try
{
login();
}
catch (Exception e)
{}
}
}
});
}
Thread th = new Thread(new Runnable() {
public void run() {
String login = inputLogin.getText().toString();
String password = inputPassword.getText().toString();
try {
URL url = new URL("https://api.myserve.secret/projects/gd02/v1/User.Login/email=" + login + "&password=" + password +"");
InputStream xx = null;
try {
xx = url.openConnection().getInputStream();
BufferedReader reader = null;
reader = new BufferedReader( new InputStreamReader( xx ));
String line = "";
try {
while((line = reader.readLine()) != null ){
html.add(line);
}
response = html.get(0);
}catch (IOException e) {
Toast.makeText(getApplicationContext(), "err adding", Toast.LENGTH_LONG).show();
}
try {
reader.close();
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "err close", Toast.LENGTH_LONG).show();
}
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "err stream", Toast.LENGTH_LONG).show();
}
}catch (MalformedURLException e) {
Toast.makeText(getApplicationContext(), "err url", Toast.LENGTH_LONG).show();
}
}
});
Thread t_interval = new Thread(new Runnable() {
public void run() {
if(response == "sended"){
interval.postDelayed(this, 200);
}else{
StatusBar.setVisibility(1);
StatusType.setText("");
StatusMessage.setText(response);
progressDialog.hide();
RepResponse = true;
}
}
});
void login() throws Exception{
progressDialog.setMessage("Авторизация");
progressDialog.show();
th.start();
t_interval.start();
}
}
(простите если есть орфографические ошибки) Помогите пожалуйста, начинающему android программисту.
Ответы (1 шт):
class RequestTask extends AsyncTask<String, String, String>{
@Override
protected String doInBackground(String... uri) {
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response;
String responseString = null;
try {
response = httpclient.execute(new HttpGet(uri[0]));
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() == HttpStatus.SC_OK){
ByteArrayOutputStream out = new ByteArrayOutputStream();
response.getEntity().writeTo(out);
responseString = out.toString();
out.close();
}else{
//Closes the connection.
response.getEntity().getContent().close();
throw new IOException(statusLine.getReasonPhrase());
}
} catch (ClientProtocolException e) {
//TODO Handle problems..
} catch (IOException e) {
//TODO Handle problems..
}
return responseString;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//убераю загрузку
LoadingBar.setVisibility(View.GONE);
//тут обработка ответа...
}
}
void login(){
//Создаю загрузку
LoadingBar.setVisibility(1);
StatusBar.setVisibility(View.GONE);
//получаю данные из формы в переменные
String login = inputLogin.getText().toString();
String password = inputPassword.getText().toString();
//дедаю запрос к серверу передавая данные.
new RequestTask().execute("https://api.myserver.mooo.com/projects/Clicker/v1/User.Login/email=" + login + "&password=" + password);
}
Весь этот код в главном классе. При нажатии на кнопку вызывается метод login() ну а дальше уже будет запрос.