2014-02-05 5 views
0

Я новичок в программировании на Android, и я пытаюсь создать функцию регистрации и входа в php, mysql и sqlite. У меня возникла эта ошибка после того, как я нажал кнопку регистрации или входа в систему. Как это исправить?NetworkOnMainThreadException для функции регистра

FATAL EXCEPTION: main 
android.os.NetworkOnMainThreadException 
     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1133) 
     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84) 
     at libcore.io.IoBridge.connectErrno(IoBridge.java:127) 
     at libcore.io.IoBridge.connect(IoBridge.java:112) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) 
     at java.net.Socket.connect(Socket.java:842) 
     at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119) 
     at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144) 
     at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164) 
     at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119) 
     at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360) 
     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) 
     at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) 
     at my.fyp.classifieds.library.JSONParser.getJSONFromUrl(JSONParser.java:42) 
     at my.fyp.classifieds.library.UserFunctions.registerUser(UserFunctions.java:59) 
     at my.fyp.inticlassifieds.Register$1.onClick(Register.java:80) 
     at android.view.View.performClick(View.java:4240) 
     at android.view.View$PerformClick.run(View.java:17721) 
     at android.os.Handler.handleCallback(Handler.java:730) 
     at android.os.Handler.dispatchMessage(Handler.java:92) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:5103) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:525) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
     at dalvik.system.NativeStart.main(Native Method) 

Я не уверен, какой класс вызывает ошибку. Это класс Регистрация:

public class Register extends Activity { 
Button btnRegister, btnLinkToLogin; 
EditText inputEmail; 
EditText inputPassword, inputCPassword; 
EditText inputContact; 
TextView registerErrorMsg; 

// JSON Response node names 
private static String KEY_SUCCESS = "success"; 
private static String KEY_ERROR = "error"; 
private static String KEY_ERROR_MSG = "error_msg"; 
private static String KEY_CONTACT = "contact"; 
private static String KEY_EMAIL = "email"; 
private static String KEY_CREATED_AT = "created_at"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_register); 

    // Importing all assets like buttons, text fields  
    inputEmail = (EditText) findViewById(R.id.registerEmail); 
    inputPassword = (EditText) findViewById(R.id.registerPassword); 
    inputCPassword = (EditText) findViewById(R.id.confirmPassword); 
    inputContact = (EditText) findViewById(R.id.registerContact); 
    btnRegister = (Button) findViewById(R.id.btnRegister); 
    btnLinkToLogin = (Button) findViewById(R.id.btnLinkToLogin); 
    registerErrorMsg = (TextView) findViewById(R.id.register_error); 

    // Register Button Click event 
    btnRegister.setOnClickListener(new View.OnClickListener() {   
     public void onClick(View view) { 
      String password = inputPassword.getText().toString(); 
      String confirmpass = inputCPassword.getText().toString(); 

      //Check all fields  
      if(inputContact.length()<10) 
      { 
       Toast.makeText(Register.this,"Please Enter correct mobile number", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      if(inputPassword.length()<6) 
      {    
       Toast.makeText(Register.this,"Please Enter minimum 6 characters in password", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      if(!password.equals(confirmpass)) 
      { 
       Toast.makeText(Register.this,"Password does not match", Toast.LENGTH_LONG).show(); 
       return; 
      } 
      if(inputEmail.length()<6) 
      {    
       Toast.makeText(Register.this,"Please Enter valid email", Toast.LENGTH_LONG).show(); 
       return; 
      } 

      String contact = inputContact.getText().toString(); 
      String email = inputEmail.getText().toString(); 
      //String password = inputPassword.getText().toString(); 
      UserFunctions userFunction = new UserFunctions(); 
      JSONObject json = userFunction.registerUser(email,contact,password); 

      // check for login response 
      try { 
       if (json.getString(KEY_SUCCESS) != null) { 
        registerErrorMsg.setText(""); 
        String res = json.getString(KEY_SUCCESS); 
        if(Integer.parseInt(res) == 1){ 
         // user successfully registred 
         // Store user details in SQLite Database 
         DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
         JSONObject json_user = json.getJSONObject("user"); 

         // Clear all previous data in database 
         userFunction.logoutUser(getApplicationContext()); 
         db.addUser(json_user.getString(KEY_EMAIL), json_user.getString(KEY_CONTACT), json_user.getString(KEY_CREATED_AT));       
         // Launch Dashboard Screen 
         Intent dashboard = new Intent(getApplicationContext(), MainMenu.class); 
         // Close all views before launching Dashboard 
         dashboard.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         startActivity(dashboard); 
         // Close Registration Screen 
         finish(); 
        }else{ 
         // Error in registration 
         registerErrorMsg.setText("Error occured in registration"); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 


    }); 

    // Link to Login Screen 
    /* public void btnLinkToLogin(View view) { 
     Intent i = new Intent (this, LoginActivity.class); 
     startActivity (i); 
     finish(); 
    }*/ 

    btnLinkToLogin.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View view) { 
      Intent i = new Intent(getApplicationContext(),LoginActivity.class); 
      startActivity(i); 
      // Close Registration View 
      finish(); 
     } 
    }); 
}} 

Это UserFunctions класс:

public class UserFunctions { 

private JSONParser jsonParser; 

private static String loginURL = "http://10.0.2.2/project/index.php"; 
private static String registerURL = "http://10.0.2.2/project/index.php"; 

private static String login_tag = "login"; 
private static String register_tag = "register"; 

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

/** 
* function make Login Request 
* @param email 
* @param password 
* */ 
public JSONObject loginUser(String email, String password){ 
    // Building Parameters 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    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 
    // Log.e("JSON", json.toString()); 
    return json; 
} 

/** 
* function make Login Request 
* @param name 
* @param email 
* @param password 
* */ 
public JSONObject registerUser(String email, String contact, String password){ 
    // Building Parameters 
    List<NameValuePair> params = new ArrayList<NameValuePair>(); 
    params.add(new BasicNameValuePair("tag", register_tag)); 
    params.add(new BasicNameValuePair("email", email)); 
    params.add(new BasicNameValuePair("contact", contact)); 
    params.add(new BasicNameValuePair("password", password)); 

    // getting JSON Object 
    JSONObject json = jsonParser.getJSONFromUrl(registerURL, params); 
    // return json 
    return json; 
} 

/** 
* Function get Login status 
* */ 
public boolean isUserLoggedIn(Context context){ 
    DatabaseHandler db = new DatabaseHandler(context); 
    int count = db.getRowCount(); 
    if(count > 0){ 
     // user logged in 
     return true; 
    } 
    return false; 
} 

/** 
* Function to logout user 
* Reset Database 
* */ 
public boolean logoutUser(Context context){ 
    DatabaseHandler db = new DatabaseHandler(context); 
    db.resetTables(); 
    return true; 
}} 
+0

NetworkOnMainThreadException возникает, когда вы пытаетесь выполнить сетевую активность в основном потоке. Создайте новый поток для сетевой активности. Я считаю, что это строка: 'jsonParser.getJSONFromUrl()' вызывает проблемы. – initramfs

+0

Проверьте эту ссылку [NetworkOnMainThreadException] (http://stackoverflow.com/questions/6343166/android-os-networkonmainthreadexception). В нем объясняется, как вы должны делать вызовы 'Network' на' Thread' или 'AsyncTask', а не на' UIThread' – Apoorv

+0

На ANR и что вызывает его: http://developer.android.com/training/articles/perf- anr.html – user2450263

ответ

0

// Ленивый способ обработки это, чтобы включить проверку: // Вы можете поместить ниже код на создание

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder(). AllowAll(). Build(); StrictMode.setThreadPolicy (политика);

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