2016-02-13 2 views
0

У меня проблемы с простым приложением, которое я делаю.Активность закрывается при нажатии кнопки

Я буду включать код:

import android.app.ProgressDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

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.apache.http.protocol.BasicHttpContext; 
import org.apache.http.protocol.HttpContext; 

import java.net.URL; 


public class login extends AppCompatActivity { 

    EditText user; 
    EditText pass; 
    boolean result_back; 
    private ProgressDialog pDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login); 

     Button log = (Button) findViewById(R.id.btLogIn2); 
     log.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) 
      { 
       login(v); 
      } 
     }); 
    } 

    public void login(View v) 
    { 
     HttpClient client = new DefaultHttpClient(); 
     HttpContext localContext = new BasicHttpContext(); 
     HttpResponse response = null; 
     user = (EditText) findViewById(R.id.eTUser); 
     String usuario = user.toString(); 
     pass = (EditText) findViewById(R.id.eTPass); 
     String passw = pass.toString(); 
     String parametros = "?usuario=" + usuario + "&password=" + passw; 
     HttpGet httpGet = new HttpGet("http://gie.byethost.com/acces.php" + parametros); 
     Toast toast2 = Toast.makeText(getApplicationContext(), "Enviando datos", Toast.LENGTH_SHORT); 
     toast2.show(); 
     try 
     { 
      response = client.execute(httpGet, localContext); 
      toast2 = Toast.makeText(getApplicationContext(), response.toString(), Toast.LENGTH_SHORT); 
      toast2.show(); 
     } 
     catch (Exception e) 
     { 

     } 
     // response.toString(); 
     if (response.toString().equalsIgnoreCase("1")) 
     { 
      Toast toast1 = Toast.makeText(getApplicationContext(), "Login correcto", Toast.LENGTH_SHORT); 
      toast1.show(); 
     } else 
     if (response.toString().equalsIgnoreCase("0")) 
     { 
      Toast toast1 = Toast.makeText(getApplicationContext(), "Error de login", Toast.LENGTH_SHORT); 
      toast1.show(); 
     } 

    } 
} 

Там только одна кнопка здесь и ни один тост показывает, так что я не вижу, где приложение сбой. Кроме того, я немного новичок в программировании на Android, так что это может иметь очевидное решение.

Любые комментарии будут оценены!

+0

сообщение Logcat – OBX

+0

oh ошибка в том, что вы используете Network on main thread – OBX

+1

вы можете использовать точки останова для отладки –

ответ

0

Выполнение сетевой транзакции по основному потоку. Никогда не делайте этого (или любое поведение блокировки) в основном потоке. Ваше приложение может быть сбой с ошибкой в ​​logcat, связанной с «StrictMode».

Вместо этого вам нужно поместить все ваши блокирующие работы в другой поток. Android имеет очень специфические шаблоны о том, как это сделать. Это не похоже на то, что вы ожидаете в обычном java-приложении.

Возможно, вы захотите рассмотреть возможность поиска «асинхронного программирования Android» и узнать о таких вещах, как AsyncTask, Loader и Service. Там есть много отличных уроков о том, как их использовать. Пожалуйста, не используйте Thread напрямую, так как это только причинит вам боль.

+0

Большое спасибо, Doug Я попытался изменить свой код, чтобы использовать AsyncTask, и теперь он падает, как только я открываю рассматриваемую активность. Я изменил следующее: Кнопка log = (кнопка) findViewById (R.id.btLogIn2); log.setOnClickListener (новый View.OnClickListener() { Override общественные недействительный OnClick (View v) { нового LongOperation() выполнение ("");. } }); } частный класс LongOperation расширяет AsyncTask { Override protected String doInBackground (String ... params) {содержимое метода входа здесь и возвращение} –

Смежные вопросы