2013-01-08 52 views
0

您好我是android新手,我正在开发一个应用程序,通过连接到mysql数据库来检查登录凭据。当连接到数据库时为空指针异常

这是我遇到的错误,它显示在模拟器中。

java.lang.NullPointerException

这是我的代码。

LoginActivity.java

import android.app.Activity; 
import java.util.ArrayList; 
import org.apache.http.NameValuePair; 
import org.apache.http.message.BasicNameValuePair; 
import android.os.Bundle; 
import android.os.StrictMode; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

public class LoginActivity extends Activity { 
    EditText un,pw; 
    TextView error; 
    Button ok; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    un=(EditText)findViewById(R.id.email_address); 
    pw=(EditText)findViewById(R.id.password); 
    ok=(Button)findViewById(R.id.login_button); 
    error=(TextView)findViewById(R.id.tv_error); 
    if (android.os.Build.VERSION.SDK_INT > 9) { 
     StrictMode.ThreadPolicy policy = 
      new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
     StrictMode.setThreadPolicy(policy); 
    } 
    ok.setOnClickListener(new View.OnClickListener() { 

    @Override 

    public void onClick(View v) { 
    // TODO Auto-generated method stub 
    ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>(); 
    postParameters.add(new BasicNameValuePair("username", un.getText().toString())); 
    postParameters.add(new BasicNameValuePair("password", pw.getText().toString())); 

    //String valid = "1"; 
    String response = null; 
    try { 
    response = CustomHttpClient.executeHttpPost("http://engiguide.com/check.php", postParameters); //Enetr Your remote PHP,ASP, Servlet file link 
    String res=response.toString(); 
    // res = res.trim(); 
    res= res.replaceAll("\\s+",""); 
    //error.setText(res); 
    if(res.equals("1")) 
    error.setText("Correct Username or Password"); 
    else 
    error.setText("Sorry!! Incorrect Username or Password"); 

    } catch (Exception e) { 

    un.setText(e.toString()); 
    }} 
    }); 
} 
} 

CustomHttpClient.java

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URI; 
import java.util.ArrayList; 
import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.conn.params.ConnManagerParams; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 

public class CustomHttpClient { 
/** The time it takes for our client to timeout */ 
public static final int HTTP_TIMEOUT = 30 * 1000; // milliseconds 
/** Single instance of our HttpClient */ 
private static HttpClient mHttpClient; 
/** 
* Get our single instance of our HttpClient object. 
* 
* @return an HttpClient object with connection parameters set 
*/ 
private static HttpClient getHttpClient() { 
if (mHttpClient == null) { 
mHttpClient = new DefaultHttpClient(); 
final HttpParams params = mHttpClient.getParams(); 
HttpConnectionParams.setConnectionTimeout(params, HTTP_TIMEOUT); 
HttpConnectionParams.setSoTimeout(params, HTTP_TIMEOUT); 
ConnManagerParams.setTimeout(params, HTTP_TIMEOUT); 
} 
return mHttpClient; 
} 
/** 
* Performs an HTTP Post request to the specified url with the 
* specified parameters. 
* 
* @param url The web address to post the request to 
* @param postParameters The parameters to send via the request 
* @return The result of the request 
* @throws Exception 
*/ 
public static String executeHttpPost(String url, ArrayList postParameters) throws Exception { 
BufferedReader in = null; 
try { 
HttpClient client = getHttpClient(); 
HttpPost request = new HttpPost(url); 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters); 
request.setEntity(formEntity); 
HttpResponse response = client.execute(request); 
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
StringBuffer sb = new StringBuffer(""); 
String line = ""; 
String NL = System.getProperty("line.separator"); 
while ((line = in.readLine()) != null) { 
sb.append(line + NL); 
} 
in.close(); 
String result = sb.toString(); 
return result; 
} finally { 
if (in != null) { 
try { 
in.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
}}}} 
public static String executeHttpGet(String url) throws Exception { 
BufferedReader in = null; 
try { 
HttpClient client = getHttpClient(); 
HttpGet request = new HttpGet(); 
request.setURI(new URI(url)); 
HttpResponse response = client.execute(request); 
in = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
StringBuffer sb = new StringBuffer(""); 
String line = ""; 
String NL = System.getProperty("line.separator"); 
while ((line = in.readLine()) != null) { 
sb.append(line + NL); 
} 
in.close(); 
String result = sb.toString(); 
return result; 
} finally { 
if (in != null) { 
try { 
in.close(); 
} catch (IOException e) { 
e.printStackTrace(); 
}}}}} 

这是用于连接到MySQL数据库的PHP代码。

<?php 
$un=$_POST['username']; 
$pw=$_POST['password']; 
//connect to the db 
$user = ‘username’; 
$pswd = ‘password’; 
$db = ‘loginactivity’; 
$conn = mysql_connect(‘localhost’, $user, $pswd); 
mysql_select_db($db, $conn); 
//run the query to search for the username and password the match 
$query = “SELECT * FROM userpass WHERE username = ‘$user’ AND password = ‘$pswd’”; 
$result = mysql_query($query) or die(“Unable to verify user because : ” . mysql_error()); 
//this is where the actual verification happens 
if(mysql_num_rows($result) > 0) 
    echo 1; // for correct login response 
else 
    echo 0; // for incorrect login response 
?> 
+5

请在代码中发布错误的完整堆栈跟踪和标记行以引起异常。 – Evos

+0

错误不会在Eclipse中显示,它显示在模拟器中,当我输入用户名和密码时,它显示用户名字段中的错误... – user1844638

+0

尝试使用一些日志并找出问题的真正地点 eg Log.E –

回答

1
Please try this: 

     String response = null; 
     try { 
     response = CustomHttpClient.executeHttpPost("http://engiguide.com/check.php", postParameters); //Enetr Your remote PHP,ASP, Servlet file link 
     String res=response.toString(); 
     // res = res.trim(); 
     res= res.replaceAll("\\s+",""); 
     //error.setText(res); 
     if(res.equals("1")) 
     error.setText("Correct Username or Password"); 
     else 
     error.setText("Sorry!! Incorrect Username or Password"); 

      } catch (Exception e) { 
    //the exception is caused in above code or from the server communication print the logs to //get the exact location 
     e.printStackTrace(); 

     un.setText(e.toString()); 
     }} 
     }); 

这会给你完整的堆栈跟踪,并在查明空指针帮助。请检查logcat是否有异常。

+0

01-08 09:45:36.979:W/Trace(2588):来自nativeGetEnabledTags的意外值:0 我得到的警告一遍又一遍地重复。 – user1844638

+0

尝试清除日志,重复该问题,保存日志并搜索保存的日志文件中的致命信息。 –

+0

response = CustomHttpClient.executeHttpPost(“http://engiguide.com/check.php”,postParameters);这一行导致了错误,因为我在我的系统上存储了文件,所以将其更改为response = CustomHttpClient.executeHttpPost(“http://10.0.2.2/check.php?user=1”,postParameters);但现在我得到连接拒绝错误。: – user1844638