2013-06-22 2 views
0

На моем последнем посте мне сказали, что моя структура была перепутана, поэтому я все изменил, поэтому я не пытаюсь делать все, начиная с одного действия.Запустить новую активность после правильного ввода в систему

Мой loginactivity принимает регистрационные данные, а затем вызывает задачу asycn, чтобы проверить, если пользователь существует в моей внешней базе данных:

public class LogIn extends Activity { 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.activity_login); 


    } 

    public void logIn(View view){ 
     EditText textU; 
     EditText textP; 

     //get userName and password from edit text 
     textU = (EditText)findViewById(R.id.Username); 
     textP = (EditText)findViewById(R.id.Password); 

     String userName = textU.getText().toString(); 
     String passW = textP.getText().toString(); 

     Log.d("logIN", userName); 
     Log.d("logIN", passW); 


     //log in url 
     String url = "myURL"; 
     String userURLComp = "u=" + userName; 
     String pURLComp = "&p=" + passW; 

     url = url + userURLComp + pURLComp; 

     Log.d("URL", url); 

     //async task for getting json 
     new ReadLogInJSON(this).execute(url); 





    } 




} 

Моя проблема заключается в том, что после проверки асинхронной задачи, если пользователь находится в базе данных I не знаю, как начать новую деятельность с асинхронным задачи:

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

    Context c; 

    public ReadLogInJSON(Context context) 
    { 
     c = context; 
    } 

    @Override 
    protected String doInBackground(String... arg0) { 
     // TODO Auto-generated method stub 
     return readJSONFeed(arg0[0]); 
    } 

    protected void onPostExecute(String result){ 

     //decode json here 
     try{ 

      JSONObject json = new JSONObject(result); 
      String status = json.getString("status"); 

      if(status.equals("no")){ 
       //toast logIN failed 

       String message = "Log In Failed"; 
       Toast.makeText(c, message, Toast.LENGTH_SHORT).show(); 

      } 

      else{ 
       //get userName 
       String userName = json.getString("userName"); 

       //get user ID 
       String userID = json.getString("userID"); 


       //set preferences 
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(c); 
       SharedPreferences.Editor editor = preferences.edit(); 
       editor.putString("userName",userName); 
       editor.putString("userID",userID); 
       editor.commit(); 

       //launch new activity 



      } 

     } 
     catch(Exception e){ 

     } 

    } 

    public String readJSONFeed(String URL) { 
     StringBuilder stringBuilder = new StringBuilder(); 
     HttpClient httpClient = new DefaultHttpClient(); 
     HttpGet httpGet = new HttpGet(URL); 
     try { 
      HttpResponse response = httpClient.execute(httpGet); 
      StatusLine statusLine = response.getStatusLine(); 
      int statusCode = statusLine.getStatusCode(); 
      if (statusCode == 200) { 
       HttpEntity entity = response.getEntity(); 
       InputStream inputStream = entity.getContent(); 
       BufferedReader reader = new BufferedReader(
         new InputStreamReader(inputStream)); 
       String line; 
       while ((line = reader.readLine()) != null) { 
        stringBuilder.append(line); 
       } 
       inputStream.close(); 
      } else { 
       Log.d("JSON", "Failed to download file"); 
      } 
     } catch (Exception e) { 
      Log.d("readJSONFeed", e.getLocalizedMessage()); 
     }   
     return stringBuilder.toString(); 
    } 

} 

Update:

Я попытался его запуска с этим:

c.startActivity(new Intent(c, Search.class)); 

но ничего не запускалось.

ответ

1

Прежде всего, вы действительно должны суффицировать имена своих классов логически, например, «LoginAsyncTask» и «SearchActivity». Во-вторых, да, правильный (и только) способ начать свою деятельность - позвонить startActivity(Intent) :) Попробуйте добавить журнал до и после startActivity, чтобы проверить, действительно ли запущен onPostExecute.

+0

сделал это, Log.d («логин», «начать новую деятельность»); \t \t \t \t c.startActivity (новый Intent (c, Search.class)); и журнал показан так, что он попадает туда – Mike

+0

Как насчет журнала после запуска. Также поместите журнал внутри onCreate of Search. Кроме того, переименуйте его в SearchActivity, чтобы сделать его более понятным. – BoD

+0

выглядит так, как будто он не запускает oncreate по какой-то причине. Никогда не запускал вход в систему: http://pastebin.com/gAtJBvy0 – Mike