2016-06-17 4 views
-5

das ist meine Login-Aktivität, die ich gemacht habe, gibt es ein Problem darin, wenn Internet-Verbindung verfügbar ist funktioniert es richtig, aber wenn es keine Internetverbindung gibt es abgestürzte Nachricht bitte helfen mir dieses ProblemIch versuche mich einzuloggen. seine Arbeit, aber wenn es keine Internetverbindung gibt, zerstören die meine Apps

zu lösen verwendet i Json

public class LoginActivity extends Activity implements OnClickListener{ 

private EditText etUser,etPassword; 
private ImageView bLogin,bCancel,bRegister; 
private Spinner spPermission; 
private static String[] PERMISSIONS = {"Admin","Donor","Accepter"}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login_layout); 

    etUser = (EditText)findViewById(R.id.etUserName); 
    etPassword = (EditText)findViewById(R.id.etPassword); 
    etUser.setText(""); 
    etPassword.setText(""); 

    spPermission = (Spinner)findViewById(R.id.spPermission); 

    ArrayAdapter<String> permAdapter = new ArrayAdapter<String>(LoginActivity.this,android.R.layout.simple_spinner_item,PERMISSIONS); 
    permAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spPermission.setAdapter(permAdapter); 

    bLogin = (ImageView)findViewById(R.id.imLogin); 
    bCancel= (ImageView)findViewById(R.id.imCancel); 
    bRegister = (ImageView)findViewById(R.id.imRegister); 

    bLogin.setOnClickListener(this); 
    bCancel.setOnClickListener(this); 
    bRegister.setOnClickListener(this); 
} 

@Override 
public void onClick(View view) { 

    switch(view.getId()) 
    { 
    case R.id.imLogin: 
     String uName = etUser.getText().toString(); 
     String password = etPassword.getText().toString(); 
     String type = spPermission.getSelectedItem().toString(); 
     String message = "POST"; 

     LoginTask task = new LoginTask(this); 
     task.execute(message,uName,password,type); 

     break; 
    case R.id.imCancel: 
     finish(); 
     break; 
    case R.id.imRegister: 
     startActivity(new Intent(getApplicationContext(), Registration.class)); 
     break; 
    default: 
     break; 
    } 

} 

public class LoginTask extends AsyncTask<String, Void, String>{ 

    private Context context; 
    private JSONParser jsonParser = new JSONParser(); 
    private JSONObject json; 
    private String login_url = //"http://192.168.1.3/login.php"; 
      "http://10.0.2.2/login.php"; 
    private String s; 
    private String USER_TYPE; 

    public LoginTask(Context c) 
    { 
     context = c; 
    } 
    @Override 
    protected String doInBackground(String... params) 
    { 

     String message = params[0]; 
     if(message.equals("POST")) 
     { 
      List<NameValuePair> list = new ArrayList<NameValuePair>(); 
      final String uName = params[1]; 
      final String uPass = params[2]; 
      final String uType = params[3]; 
      USER_TYPE = uType; 
      list.add(new BasicNameValuePair("username", uName)); 
      list.add(new BasicNameValuePair("password",uPass)); 
      list.add(new BasicNameValuePair("type", uType)); 

      json = jsonParser.makeHttpRequest(login_url, params[0], list); 
     } 
     try 
     { 
      s = json.getString("message"); 
     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return s; 
    } 
    @Override 
    protected void onPostExecute(String result) 
    { 
     try { 
      int success = json.getInt("success"); 
      if(success==1) 
      { 
       Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
       Intent i = new Intent(context.getApplicationContext(),MainView.class); 
       i.putExtra("type", USER_TYPE); 
       context.startActivity(i); 
      } 
      else 
       //Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
       Toast.makeText(context, "Sorry No connection", Toast.LENGTH_LONG).show(); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

} 
+1

sein Was Sie in der logcat sehen? Bitte senden Sie die Ausnahme Stack-Ablaufverfolgung. – Egor

Antwort

0

Änderung youur doInBackground() Methode:

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

    String message = params[0]; 
    if (message.equals("POST")) { 
     try { 
      List<NameValuePair> list = new ArrayList<NameValuePair>(); 
      final String uName = params[1]; 
      final String uPass = params[2]; 
      final String uType = params[3]; 
      USER_TYPE = uType; 
      list.add(new BasicNameValuePair("username", uName)); 
      list.add(new BasicNameValuePair("password", uPass)); 
      list.add(new BasicNameValuePair("type", uType)); 

      json = jsonParser.makeHttpRequest(login_url, params[0], list); 
     } 

     s = json.getString("message"); 
    }catch(Exception ex){ 
     ex.printStackTrace(); 
    }catch(JSONException e){ 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return s; 
} 

} 
0

vor dem Aufruf von Ihrem Internet-con asyntask überprüfen bindung, wie folgend

Ort, um diese in einem gewissen Konstanten Klasse

public static boolean isConnectingToInternet(){ 
    ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) 
    { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) 
      for (int i = 0; i < info.length; i++) 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) 
       { 
        return true; 
       } 

    } 
    return false; 
} 

und während mit folgenden

if(Constants.isConnectingToInternet()) {LoginTask task = new LoginTask(this); 
    task.execute(message,uName,password,type);} 

asyntask Check-Konnektivität Aufruf wird es auf jeden Fall funktionieren.

+0

Wo kann ich den folgenden Code einfügen? Bitte helfen Sie mir? – Alice

+0

Erstellen Sie eine separate statische Klasse als Konstanten und innerhalb der Klasse können Sie diese Methode platzieren, und Sie können diese in der aktuellen Klasse mit zweiten Code-Snippet –

+0

ich habe es aber einen Fehler unter Kontext anzeigen – Alice

0

Sie Klasse wie sein

public class LoginActivity extends Activity implements OnClickListener{ 

    private EditText etUser,etPassword; 
    private ImageView bLogin,bCancel,bRegister; 
    private Spinner spPermission; 
    private static String[] PERMISSIONS = {"Admin","Donor","Accepter"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.login_layout); 
    Constants.context=this; 
     etUser = (EditText)findViewById(R.id.etUserName); 
     etPassword = (EditText)findViewById(R.id.etPassword); 
     etUser.setText(""); 
     etPassword.setText(""); 

     spPermission = (Spinner)findViewById(R.id.spPermission); 

     ArrayAdapter<String> permAdapter = new ArrayAdapter<String>(LoginActivity.this,android.R.layout.simple_spinner_item,PERMISSIONS); 
     permAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spPermission.setAdapter(permAdapter); 

     bLogin = (ImageView)findViewById(R.id.imLogin); 
     bCancel= (ImageView)findViewById(R.id.imCancel); 
     bRegister = (ImageView)findViewById(R.id.imRegister); 

     bLogin.setOnClickListener(this); 
     bCancel.setOnClickListener(this); 
     bRegister.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View view) { 

     switch(view.getId()) 
     { 
     case R.id.imLogin: 
      String uName = etUser.getText().toString(); 
      String password = etPassword.getText().toString(); 
      String type = spPermission.getSelectedItem().toString(); 
      String message = "POST"; 
    if(Constants.isConnectingToInternet()) {LoginTask task = new LoginTask(this); 
task.execute(message,uName,password,type);} 


      break; 
     case R.id.imCancel: 
      finish(); 
      break; 
     case R.id.imRegister: 
      startActivity(new Intent(getApplicationContext(), Registration.class)); 
      break; 
     default: 
      break; 
     } 

    } 

    public class LoginTask extends AsyncTask<String, Void, String>{ 

     private Context context; 
     private JSONParser jsonParser = new JSONParser(); 
     private JSONObject json; 
     private String login_url = //"http://192.168.1.3/login.php"; 
       "http://10.0.2.2/login.php"; 
     private String s; 
     private String USER_TYPE; 

     public LoginTask(Context c) 
     { 
      context = c; 
     } 
     @Override 
     protected String doInBackground(String... params) 
     { 

      String message = params[0]; 
      if(message.equals("POST")) 
      { 
       List<NameValuePair> list = new ArrayList<NameValuePair>(); 
       final String uName = params[1]; 
       final String uPass = params[2]; 
       final String uType = params[3]; 
       USER_TYPE = uType; 
       list.add(new BasicNameValuePair("username", uName)); 
       list.add(new BasicNameValuePair("password",uPass)); 
       list.add(new BasicNameValuePair("type", uType)); 

       json = jsonParser.makeHttpRequest(login_url, params[0], list); 
      } 
      try 
      { 
       s = json.getString("message"); 
      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return s; 
     } 
     @Override 
     protected void onPostExecute(String result) 
     { 
      try { 
       int success = json.getInt("success"); 
       if(success==1) 
       { 
        Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
        Intent i = new Intent(context.getApplicationContext(),MainView.class); 
        i.putExtra("type", USER_TYPE); 
        context.startActivity(i); 
       } 
       else 
        //Toast.makeText(context, result, Toast.LENGTH_LONG).show(); 
        Toast.makeText(context, "Sorry No connection", Toast.LENGTH_LONG).show(); 

      } catch (JSONException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
    } 

    } 

und Ihre Konstanten Klasse

public class Constants { 
    public static final Context context=null; 
    public static boolean isConnectingToInternet(){ 
     ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     if (connectivity != null) 
     { 
      NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
      if (info != null) 
       for (int i = 0; i < info.length; i++) 
        if (info[i].getState() == NetworkInfo.State.CONNECTED) 
        { 
         return true; 
        } 

     } 
     return false; 
    } 
}