2015-10-18 65 views
-1

我是新来的android开发,我一直在这个项目上创建一个登录函数。但我似乎有问题从我的服务器检索信息。无法让我的代码工作。似乎无法将我的android连接到我的php服务器

Login.java

package com.httpkhronolog.khronolog; 

import android.app.ActionBar; 
import android.app.Notification; 
import android.content.Context; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.View; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.Toast; 
import android.util.Log; 
import org.json.JSONException; 
import org.json.JSONObject; 
import java.io.BufferedReader; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.ProtocolException; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.HashMap; 

public class Login_Activity extends AppCompatActivity { 

    public static final String SERVER_ADDRESS = "http://www.khronolog.com/mobile/"; 
    public static final String TAG_LOGINSTATUS = "loginStatus"; 
    EditText etUsername, etPassword; 
    ImageButton ibLogin; 
    Context context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login_); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     context = this; 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

     etUsername = (EditText) findViewById(R.id.etUsername); 
     etPassword = (EditText) findViewById(R.id.etPassword); 
     ibLogin = (ImageButton)findViewById(R.id.ibLogin); 

     ibLogin.setOnClickListener(new View.OnClickListener(){ 
      public void onClick(View v){ 
       String username = etUsername.getText().toString(); 
       String password = etPassword.getText().toString(); 

       if(username.length() == 0 || password.length() == 0){ 
        Toast toast = Toast.makeText(context, "Username or password not entered", Toast.LENGTH_SHORT); 
        toast.show(); 
        return; 
       }else 
       { 
        new checkUserDetails().execute(username, password); 
       } 
      } 
     }); 

    } 

    public class checkUserDetails extends AsyncTask<String, Boolean, Boolean> 
    { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
     } 

     @Override 
     protected Boolean doInBackground(String... params) { 


      DataOutputStream printout; 
      HttpURLConnection urlConn; 
      BufferedReader reader; 
      URL url; 
      String json; 
      JSONObject jObj; 
      Boolean JSONLogin = false; 

      //send POST login details to server 
      try { 
       url = new URL(SERVER_ADDRESS + "login.php"); 
       urlConn = (HttpURLConnection) url.openConnection(); 
       urlConn.setRequestMethod("POST"); 
       urlConn.setDoOutput(true); 
       urlConn.setRequestProperty("Accept-Charset", "UTF-8"); 
       urlConn.setReadTimeout(10000); 
       urlConn.setConnectTimeout(15000); 

       HashMap<String, String> map = new HashMap<String, String>(); 
       map.put("username", params[0]); 
       map.put("password", params[1]); 

       StringBuilder sb = new StringBuilder(); 
       for(HashMap.Entry<String, String> e : map.entrySet()){ 
        if(sb.length() > 0){ 
         sb.append("&"); 
        } 
        sb.append(URLEncoder.encode(e.getKey(), "UTF-8")).append("=").append(URLEncoder.encode(e.getValue(), "UTF-8")); 
       } 


       String loginDetails = sb.toString(); 

       printout = new DataOutputStream(urlConn.getOutputStream()); 
       printout.writeBytes(loginDetails); 
       printout.flush(); 
       printout.close(); 

       reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream())); 
       StringBuilder sb2 = new StringBuilder(); 
       String result = null; 
       while((result=reader.readLine())!=null) { 
        sb2.append(result + '\n'); 
        Log.d("Results", sb2.toString()); 
       }; 

       json = result.toString(); 

       jObj = new JSONObject(json); 


       JSONLogin = jObj.getBoolean(TAG_LOGINSTATUS); 
       Log.d("LoginStatus!!!!", JSONLogin.toString()); 

      } catch (MalformedURLException e) { 
       e.printStackTrace(); 
      } catch (ProtocolException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } catch (JSONException e) { 
       Log.d("JsonConvertion", "FAILED TO CONVERT JSON"); 
      } 


      return JSONLogin; 
     } 

     @Override 
     protected void onPostExecute(Boolean aBoolean) { 
      super.onPostExecute(aBoolean); 
     } 
    } 




    /* 
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_login_, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
    */ 
} 

的login.php服务器上

<?php 
if (isset($_POST['username'])) { 
     // Define $username and $password 
     $username=$_POST['username']; 
     $password=$_POST['password']; 
     // Establishing Connection with Server by passing server_name, user_id and password as a parameter 
     $connection = mysql_connect("localhost", "SomeAdmin", "somepassword"); 
     // To protect MySQL injection for Security purpose 
     $username = stripslashes($username); 
     $password = stripslashes($password); 
     $username = mysql_real_escape_string($username); 
     $password = mysql_real_escape_string($password); 
     // Selecting Database 
     $db = mysql_select_db("khronolo_systemdb", $connection); 
     // SQL query to fetch information of registerd users and finds user match. 
     $query = mysql_query("select * from user_table where password='$password' AND email='$username'", $connection); 
     $rows = mysql_num_rows($query); 
     if ($rows == 1) { 
      $returnValue[] = array("loginStatus"=> "true"); 
      echo json_encode($returnValue); 
     } 
     else { 
      $returnValue[] = array("loginStatus"=> "false"); 
      echo json_encode($returnValue); 
     } 
     mysql_close($connection); // Closing Connection 
    } 
} 

?>

堆栈跟踪误差

10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: Process: com.httpkhronolog.khronolog, PID: 2594 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: java.lang.RuntimeException: An error occurred while executing doInBackground() 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$3.done(AsyncTask.java:309) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.lookupHostByName(InetAddress.java:464) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByName(InetAddress.java:215) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:125) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:82) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$2.call(AsyncTask.java:295) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at libcore.io.Posix.android_getaddrinfo(Native Method) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.lookupHostByName(InetAddress.java:451) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByName(InetAddress.java:215)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:125)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:82)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$2.call(AsyncTask.java:295)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime: Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied) 
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at libcore.io.Posix.android_getaddrinfo(Native Method)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.lookupHostByName(InetAddress.java:451)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.net.InetAddress.getAllByName(InetAddress.java:215)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.Network$1.resolveInetAddresses(Network.java:29)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.resetNextInetSocketAddress(RouteSelector.java:188)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.nextProxy(RouteSelector.java:157)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.RouteSelector.next(RouteSelector.java:100)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.createNextConnection(HttpEngine.java:357)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.nextConnection(HttpEngine.java:340)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:330)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:248)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:433)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:114)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getOutputStream(HttpURLConnectionImpl.java:245)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:125)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at com.httpkhronolog.khronolog.Login_Activity$checkUserDetails.doInBackground(Login_Activity.java:82)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$2.call(AsyncTask.java:295)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.FutureTask.run(FutureTask.java:237)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
10-18 18:12:05.310 2594-2711/? E/AndroidRuntime:  at java.lang.Thread.run(Thread.java:818)  
10-18 18:12:05.328 1296-1846/? W/ActivityManager: Force finishing activity com.httpkhronolog.khronolog/.Login_Activity 

我知道我的问题是在aynctask,但我不知道如何解决它:(。请帮助

回答

1

添加Internet权限AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
相关问题