2016-04-09 86 views
-1

我尝试一个在线教程进行注册并登录,我将执行所有操作。但我的问题是当我填写表单并连接到网络后尝试按下寄存器时,它会中止显示错误的应用程序(不幸learn2crackLogin已停止)Android应用程序不会连接到本地主机(Wempserver)

应用程序的名称是learn2crachLogin。一个我主持的WWW数据库文件中wempserver名learn2crack_login_api

我试着回答slimier问题下,但它并没有解决我的问题

我不知道什么截图你需要所以请让我知道..

这里是我的清单

<uses-permission android:name="android.permission.INTERNET"> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
</uses-permission> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/logo1" 
    android:label="@string/app_name"> 

    <activity 
     android:label="@string/app_name" 
     android:name=".Login" 
     android:launchMode="singleTop" 
     android:windowSoftInputMode="adjustPan"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN"/> 
       <category android:name="android.intent.category.LAUNCHER"/> 
       </intent-filter> 
    </activity> 
    <activity android:label="@string/app_name" android:name=".Register"> 

    </activity> 

    <activity android:label="@string/app_name" android:name=".Registered"> 

    </activity> 

    <activity android:label="Learn2Crack USER PANEL" android:name=".Main"> 

    </activity> 

    <activity android:label="@string/app_name" 
    android:name=".PasswordReset"> 

    </activity> 
    <activity android:label="@string/app_name" android:name=".ChangePassword"> 

    </activity> 

</application> 



</manifest> 

这里是包含本地主机连接

的UserFunctions.JAVA
package learn2crack.com.learn2cracklogin.library; 

import java.util.ArrayList; 
import java.util.List; 
import org.apache.http.NameValuePair;  
import org.apache.http.message.BasicNameValuePair; 
import org.json.JSONObject; 
import android.content.Context; 

public class UserFunctions { 

private JSONParser jsonParser; 

//URL of the PHP API 
private static String loginURL = "http://10.0.2.2/learn2crack_login_api/"; 
private static String registerURL = "http://10.0.2.2/learn2crack_login_api/"; 
private static String forpassURL = "http://10.0.2.2/learn2crack_login_api/"; 
private static String chgpassURL = "http://10.0.2.2/learn2crack_login_api/"; 

private static String login_tag = "login"; 
private static String register_tag = "register"; 
private static String forpass_tag = "forpass"; 
private static String chgpass_tag = "chgpass"; 

// constructor 
public UserFunctions(){ 
    jsonParser = new JSONParser(); 
} 

/** 
* Function to Login 
**/ 

public JSONObject loginUser(String email, String password){ 
    // Building Parameters 
    List params = new ArrayList(); 
    params.add(new BasicNameValuePair("tag", login_tag)); 
    params.add(new BasicNameValuePair("email", email)); 
    params.add(new BasicNameValuePair("password", password)); 
    JSONObject json = jsonParser.getJSONFromUrl(loginURL, params); 
    return json; 
} 

/** 
* Function to change password 
**/ 

public JSONObject chgPass(String newpas, String email){ 
    List params = new ArrayList(); 
    params.add(new BasicNameValuePair("tag", chgpass_tag)); 

    params.add(new BasicNameValuePair("newpas", newpas)); 
    params.add(new BasicNameValuePair("email", email)); 
    JSONObject json = jsonParser.getJSONFromUrl(chgpassURL, params); 
    return json; 
} 

/** 
* Function to reset the password 
**/ 

public JSONObject forPass(String forgotpassword){ 
    List params = new ArrayList(); 
    params.add(new BasicNameValuePair("tag", forpass_tag)); 
    params.add(new BasicNameValuePair("forgotpassword", forgotpassword)); 
    JSONObject json = jsonParser.getJSONFromUrl(forpassURL, params); 
    return json; 
} 

/** 
* Function to Register 
**/ 
public JSONObject registerUser(String fname, String lname, String email,  String uname, String password){ 
    // Building Parameters 
    List params = new ArrayList(); 
    params.add(new BasicNameValuePair("tag", register_tag)); 
    params.add(new BasicNameValuePair("fname", fname)); 
    params.add(new BasicNameValuePair("lname", lname)); 
    params.add(new BasicNameValuePair("email", email)); 
    params.add(new BasicNameValuePair("uname", uname)); 
    params.add(new BasicNameValuePair("password", password)); 
    JSONObject json = jsonParser.getJSONFromUrl(registerURL,params); 
    return json; 
} 

/** 
* Function to logout user 
* Resets the temporary data stored in SQLite Database 
* */ 
public boolean logoutUser(Context context){ 
    DatabaseHandler db = new DatabaseHandler(context); 
    db.resetTables(); 
    return true; 
} 

} 

这是我的register.java 包learn2crack.com.learn2cracklogin;

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.Intent; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 
import android.widget.Toast; 

import learn2crack.com.learn2cracklogin.library.DatabaseHandler; 
import learn2crack.com.learn2cracklogin.library.UserFunctions; 

import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.IOException; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 

public class Register extends Activity { 

/** 
* JSON Response node names. 
**/ 

private static String KEY_SUCCESS = "success"; 
private static String KEY_UID = "uid"; 
private static String KEY_FIRSTNAME = "fname"; 
private static String KEY_LASTNAME = "lname"; 
private static String KEY_USERNAME = "uname"; 
private static String KEY_EMAIL = "email"; 
private static String KEY_CREATED_AT = "created_at"; 
private static String KEY_ERROR = "error"; 

/** 
* Defining layout items. 
**/ 

EditText inputFirstName; 
EditText inputLastName; 
EditText inputUsername; 
EditText inputEmail; 
EditText inputPassword; 
Button btnRegister; 
TextView registerErrorMsg; 

/** 
* Called when the activity is first created. 
*/ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.register); 

    /** 
    * Defining all layout items 
    **/ 
    inputFirstName = (EditText) findViewById(R.id.fname); 
    inputLastName = (EditText) findViewById(R.id.lname); 
    inputUsername = (EditText) findViewById(R.id.uname); 
    inputEmail = (EditText) findViewById(R.id.email); 
    inputPassword = (EditText) findViewById(R.id.pword); 
    btnRegister = (Button) findViewById(R.id.register); 
    registerErrorMsg = (TextView) findViewById(R.id.register_error); 

/** 
* Button which Switches back to the login screen on clicked 
**/ 

    Button login = (Button) findViewById(R.id.bktologin); 
    login.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View view) { 
      Intent myIntent = new Intent(view.getContext(), Login.class); 
      startActivityForResult(myIntent, 0); 
      finish(); 
     } 

    }); 

    /** 
    * Register Button click event. 
    * A Toast is set to alert when the fields are empty. 
    * Another toast is set to alert Username must be 5 characters. 
    **/ 

    btnRegister.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      if ( (!inputUsername.getText().toString().equals("")) && (!inputPassword.getText().toString().equals("")) && (!inputFirstName.getText().toString().equals("")) && (!inputLastName.getText().toString().equals("")) && (!inputEmail.getText().toString().equals(""))) 
      { 
       if (inputUsername.getText().toString().length() > 4){ 
        NetAsync(view); 

       } 
       else 
       { 
        Toast.makeText(getApplicationContext(), 
          "Username should be minimum 5 characters", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      else 
      { 
       Toast.makeText(getApplicationContext(), 
         "One or more fields are empty", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 
} 
/** 
* Async Task to check whether internet connection is working 
**/ 

private class NetCheck extends AsyncTask<String,Void,Boolean> 
{ 
    private ProgressDialog nDialog; 

    @Override 
    protected void onPreExecute(){ 
     super.onPreExecute(); 
     nDialog = new ProgressDialog(Register.this); 
     nDialog.setMessage("Loading.."); 
     nDialog.setTitle("Checking Network"); 
     nDialog.setIndeterminate(false); 
     nDialog.setCancelable(true); 
     nDialog.show(); 
    } 

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

/** 
* Gets current device state and checks for working internet connection by  trying Google. 
**/ 
     ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
     if (netInfo != null && netInfo.isConnected()) { 
      try { 
       URL url = new URL("http://www.google.com"); 
       HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
       urlc.setConnectTimeout(3000); 
       urlc.connect(); 
       if (urlc.getResponseCode() == 200) { 
        return true; 
       } 
      } catch (MalformedURLException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 
     return false; 

    } 
    @Override 
    protected void onPostExecute(Boolean th){ 

     if(th == true){ 
      nDialog.dismiss(); 
      new ProcessRegister().execute(); 
     } 
     else{ 
      nDialog.dismiss(); 
      registerErrorMsg.setText("Error in Network Connection"); 
     } 
    } 
} 

private class ProcessRegister extends AsyncTask<String,Void,JSONObject> { 

    /** 
    * Defining Process dialog 
    **/ 
    private ProgressDialog pDialog; 

    String email,password,fname,lname,uname; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     inputUsername = (EditText) findViewById(R.id.uname); 
     inputPassword = (EditText) findViewById(R.id.pword); 
     fname = inputFirstName.getText().toString(); 
     lname = inputLastName.getText().toString(); 
     email = inputEmail.getText().toString(); 
     uname= inputUsername.getText().toString(); 
     password = inputPassword.getText().toString(); 
     pDialog = new ProgressDialog(Register.this); 
     pDialog.setTitle("Contacting Servers"); 
     pDialog.setMessage("Registering ..."); 
     pDialog.setIndeterminate(false); 
     pDialog.setCancelable(true); 
     pDialog.show(); 
    } 

    @Override 
    protected JSONObject doInBackground(String... args) { 

     UserFunctions userFunction = new UserFunctions(); 
     JSONObject json = userFunction.registerUser(fname, lname, email, uname, password); 

     return json; 

    } 
    @Override 
    protected void onPostExecute(JSONObject json) { 
     /** 
     * Checks for success message. 
     **/ 
     try { 
      if (json.getString(KEY_SUCCESS) != null) { 
       registerErrorMsg.setText(""); 
       String res = json.getString(KEY_SUCCESS); 

       String red = json.getString(KEY_ERROR); 

       if(Integer.parseInt(res) == 1){ 
        pDialog.setTitle("Getting Data"); 
        pDialog.setMessage("Loading Info"); 

        registerErrorMsg.setText("Successfully Registered"); 

        DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
        JSONObject json_user = json.getJSONObject("user"); 

        /** 
        * Removes all the previous data in the SQlite database 
        **/ 

        UserFunctions logout = new UserFunctions(); 
        logout.logoutUser(getApplicationContext()); 
        db.addUser(json_user.getString(KEY_FIRSTNAME),json_user.getString(KEY_LASTNAME),json_user.getString(KEY_EMAIL),json_user.getString(KEY_USERNAME),json_user.getString(KEY_UID),json_user.getString(KEY_CREATED_AT)); 
        /** 
        * Stores registered data in SQlite Database 
        * Launch Registered screen 
        **/ 

        Intent registered = new Intent(getApplicationContext(), Registered.class); 

        /** 
        * Close all views before launching Registered screen 
        **/ 
        registered.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
        pDialog.dismiss(); 
        startActivity(registered); 

        finish(); 
       } 

       else if (Integer.parseInt(red) ==2){ 
        pDialog.dismiss(); 
        registerErrorMsg.setText("User already exists"); 
       } 
       else if (Integer.parseInt(red) ==3){ 
        pDialog.dismiss(); 
        registerErrorMsg.setText("Invalid Email id"); 
       } 

      } 

      else{ 
       pDialog.dismiss(); 

       registerErrorMsg.setText("Error occured in registration"); 
      } 

     } catch (JSONException e) { 
      e.printStackTrace(); 

     } 
    }} 
public void NetAsync(View view){ 
    new NetCheck().execute(); 
}} 

logcat的

04-09 14:42:05.992 3951-3971/learn2crack.com.learn2cracklogin E/Surface:   getSlotFromBufferLocked: unknown buffer: 0xabd2ef80 
04-09 14:42:07.289 3951-3971/learn2crack.com.learn2cracklogin W/EGL_emulation: eglSurfaceAttrib not implemented 
04-09 14:42:07.289 3951-3971/learn2crack.com.learn2cracklogin W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabe8a180, error=EGL_SUCCESS 
04-09 14:42:09.207 3951-3971/learn2crack.com.learn2cracklogin E/Surface: getSlotFromBufferLocked: unknown buffer: 0xabd2eb90 
04-09 14:42:25.120 3951-3974/learn2crack.com.learn2cracklogin E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #1 
                       Process: learn2crack.com.learn2cracklogin, PID: 3951 
                      java.lang.RuntimeException: An error occurred while executing doInBackground() 
                       at android.os.AsyncTask$3.done(AsyncTask.java:309) 
                       at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354) 
                       at java.util.concurrent.FutureTask.setException(FutureTask.java:223) 
                       at java.util.concurrent.FutureTask.run(FutureTask.java:242) 
                       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234) 
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113) 
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588) 
                       at java.lang.Thread.run(Thread.java:818) 
                      Caused by: java.lang.SecurityException: ConnectivityService: Neither user 10064 nor current process has android.permission.ACCESS_NETWORK_STATE. 
                       at android.os.Parcel.readException(Parcel.java:1599) 
                       at android.os.Parcel.readException(Parcel.java:1552) 
                       at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo(IConnectivityManager.java:974) 
                       at android.net.ConnectivityManager.getActiveNetworkInfo(ConnectivityManager.java:646) 
                       at learn2crack.com.learn2cracklogin.Register$NetCheck.doInBackground(Register.java:144) 
                       at learn2crack.com.learn2cracklogin.Register$NetCheck.doInBackground(Register.java:122) 
                       at android.os.AsyncTask$2.call(AsyncTask.java:295) 
                       at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
                       at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)  
                       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)  
                       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)  
                       at java.lang.Thread.run(Thread.java:818)  
04-09 14:42:25.250 3951-3971/learn2crack.com.learn2cracklogin W/EGL_emulation: eglSurfaceAttrib not implemented 
04-09 14:42:25.250 3951-3971/learn2crack.com.learn2cracklogin W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xabe8ae20, error=EGL_SUCCESS 
04-09 14:42:27.586 3951-3951/learn2crack.com.learn2cracklogin I/Choreographer: Skipped 138 frames! The application may be doing too much work on its main thread. 
04-09 14:42:28.139 3951-3971/learn2crack.com.learn2cracklogin E/Surface: getSlotFromBufferLocked: unknown buffer: 0xabd30d40 
04-09 14:42:28.148 3951-3971/learn2crack.com.learn2cracklogin D/OpenGLRenderer: endAllStagingAnimators on 0xa33f5c00 (RippleDrawable) with handle 0xa35b1640 
04-09 14:42:28.224 3951-3971/learn2crack.com.learn2cracklogin E/Surface: getSlotFromBufferLocked: unknown buffer: 0xabd322b0 
04-09 14:42:28.989 3951-3951/learn2crack.com.learn2cracklogin E/Surface: queueBuffer: error queuing buffer to SurfaceTexture, -19 
04-09 14:42:28.989 3951-3951/learn2crack.com.learn2cracklogin E/Surface: queueBuffer (handle=0xabd30a30) failed (No such device) 
04-09 14:42:29.002 3951-3951/learn2crack.com.learn2cracklogin E/ViewRootImpl: Could not unlock surface 
                      java.lang.IllegalArgumentException 
                       at android.view.Surface.nativeUnlockCanvasAndPost(Native Method) 
                       at android.view.Surface.unlockSwCanvasAndPost(Surface.java:301) 
                       at android.view.Surface.unlockCanvasAndPost(Surface.java:282) 
                       at android.view.ViewRootImpl.drawSoftware(ViewRootImpl.java:2739) 
                       at android.view.ViewRootImpl.draw(ViewRootImpl.java:2642) 
                       at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2434) 
                       at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067) 
                       at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107) 
                       at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013) 
                       at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) 
                       at android.view.Choreographer.doCallbacks(Choreographer.java:670) 
                       at android.view.Choreographer.doFrame(Choreographer.java:606) 
                       at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) 
                       at android.os.Handler.handleCallback(Handler.java:739) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
04-09 14:42:29.008 3951-3951/learn2crack.com.learn2cracklogin I/Choreographer: Skipped 46 frames! The application may be doing too much work on its main thread. 
04-09 14:43:00.264 3951-3957/learn2crack.com.learn2cracklogin W/art: Suspending all threads took: 13.774ms 
04-09 14:44:06.189 3951-3957/learn2crack.com.learn2cracklogin W/art: Suspending all threads took: 16.496ms 
04-09 14:47:25.240 3951-3974/learn2crack.com.learn2cracklogin I/Process: Sending signal. PID: 3951 SIG: 9 

请帮我

+0

它给出了哪个错误?发布您的logcat输出 – Pelocho

+0

@ Dr.Pelocho对不起,我刚刚做了 – NuhaAbd

+1

'由java.lang.SecurityException产生:ConnectivityService:无论用户10064还是当前进程都有android.permission.ACCESS_NETWORK_STATE'现在请解释这个不错的部分错误信息你不了解。 – csmckelvey

回答

0

我可以在你的代码中看到多个错误。

  1. 替换此

<uses-permission android:name="android.permission.INTERNET"> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> </uses-permission>

<uses-permission android:name="android.permission.INTERNET"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
  • 替换列表与List<NameValuePair>

  • 添加“?”到您的标签,如“登录?”,“注册?”,..

  • +0

    非常感谢!当我替换List语句时,android工作室跨越 NuhaAbd

    +0

    我实现了其他更改,现在它告诉我它正在连接到服务器..然后放弃 – NuhaAbd

    +0

    这是logcat中的apears:java.lang.NullPointerException:尝试调用虚拟方法'java .lang.String org.json.JSONObject.getString(java.lang.String)'null对象引用 – NuhaAbd

    相关问题