2016-02-13 130 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

哦错误是因为你在主线程上使用网络 – OBX

+1

你可以使用断点来调试 –

回答

0

您正在主线程上执行网络事务。切勿在主线程上执行此操作(或任何阻塞行为)。您的应用可能会因与“StrictMode”相关的logcat中的错误而崩溃。

相反,您需要将所有阻塞工作放在另一个线程上。 Android有非常具体的模式,如何做到这一点。这不像你在正常的java应用程序中所期望的那样。

您可能需要考虑搜索“android asynchronous programming”并了解诸如AsyncTaskLoaderService之类的内容。关于如何使用它们,有很多很棒的教程。请不要直接使用线程,因为这只会导致你痛苦。

+0

非常感谢,Doug 我试着更改我的代码以使用AsyncTask,现在一旦我打开有问题的活动就会崩溃。 我改变了以下内容: Button log =(Button)findViewById(R.id.btLogIn2); log.setOnClickListener(新View.OnClickListener(){ 覆盖 公共 无效的onClick(视图v){ 新 LongOperation()执行( “”);} }); } 私有类LongOperation延伸的AsyncTask <字符串,空隙,字符串> { 覆盖 保护字符串doInBackground(字符串... PARAMS){这里登录方法内容和返回} –

相关问题