2014-01-05 3 views
1

В настоящее время я разрабатываю приложение для Android, которое связано с базой данных MySQL. Прямо сейчас у меня проблема с моим AsyncTask. Это дает мне ошибки:Тип <> должен реализовать унаследованный абстрактный метод AsyncTask.doInBackground (Object ...)

Тип MainActivity.NetCheck должен реализовать унаследованный абстрактный метод AsyncTask.doInBackground(Object...)

Тип MainActivity.ProcessLogin должен реализовать унаследованный абстрактный метод AsyncTask.doInBackground(Object...)

Вот код:

/** 
* Async Task to check whether internet connection is working. 
**/ 
    private class NetCheck extends AsyncTask 
    { 
     private ProgressDialog nDialog; 
     @Override 
     protected void onPreExecute(){ 
      super.onPreExecute(); 
      nDialog = new ProgressDialog(MainActivity.this); 
      nDialog.setTitle("Checking Network"); 
      nDialog.setMessage("Loading.."); 
      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 ProcessLogin().execute(); 
      } 
      else{ 
       nDialog.dismiss(); 
       loginErrorMsg.setText("Error in Network Connection"); 
      } 
     } 
    } 

/** 
    * Async Task to get and send data to My Sql database through JSON response. 
    **/ 
    private class ProcessLogin extends AsyncTask { 
     private ProgressDialog pDialog; 
     String UserID,Password; 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      loginUName = (EditText) findViewById(R.id.loginUsername); 
      loginPword = (EditText) findViewById(R.id.loginPassword); 
      UserID = loginUName.getText().toString(); 
      Password = loginPword.getText().toString(); 
      pDialog = new ProgressDialog(MainActivity.this); 
      pDialog.setTitle("Contacting Servers"); 
      pDialog.setMessage("Logging in ..."); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
     @Override 
     protected JSONObject doInBackground(String... args) { 
      UserFunctions userFunction = new UserFunctions(); 
      JSONObject json = userFunction.loginUser(UserID, Password); 
      return json; 
     } 
     @Override 
     protected void onPostExecute(JSONObject json) { 
      try { 
       if (json.getString(KEY_SUCCESS) != null) { 
        String res = json.getString(KEY_SUCCESS); 
        if(Integer.parseInt(res) == 1){ 
         pDialog.setMessage("Loading User Space"); 
         pDialog.setTitle("Getting Data"); 
         DatabaseHandler db = new DatabaseHandler(getApplicationContext()); 
         JSONObject json_user = json.getJSONObject("user"); 
         /** 
         * Clear all previous data in 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)); 
         /** 
         *If JSON array details are stored in SQlite it launches the User Panel. 
         **/ 
         Intent upanel = new Intent(getApplicationContext(), Index.class); 
         upanel.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
         pDialog.dismiss(); 
         startActivity(upanel); 
         /** 
         * Close Login Screen 
         **/ 
         finish(); 
        }else{ 
         pDialog.dismiss(); 
         loginErrorMsg.setText("Incorrect username/password"); 
        } 
       } 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    public void NetAsync(View view){ 
     new NetCheck().execute(); 
    } 
+0

Не используйте сырой тип, AsyncTask набирается, насколько я помню, –

ответ

4

AsyncTask необходимо определить 3 общих типа как foll из-за:

AsyncTask<Params, Progress, Result> 

В вашем случае это должно быть

AsyncTask<String, Void, Boolean> 

Так просто продлить, как это:

private class NetCheck extends AsyncTask<String, Void, Boolean> 
+0

Спасибо, но теперь она дает мне ошибку «Тип возвращаемого несовместим с AsyncTask .doInBackground (String []) на @Override защищенный JSONObject doInBackground (String ...args) { UserFunctions userFunction = new UserFunctions(); JSONObject json = userFunction.loginUser (UserID, Password); return json; } –

2

Ваши AsyncTask с отсутствуют параметры универсального типа, так Object предполагается, но ваша реализация использует более конкретные классы в качестве типов.

Таким образом, изменить

private class NetCheck extends AsyncTask 

в

private class NetCheck extends AsyncTask<String, Void, Boolean> 

Первые общий типа парами является типом параметра для doInBackground. Второй - это тип параметра для обновлений прогресса, а третий - тип результата.

Вам также понадобятся аналогичные изменения в классе ProcessLogin.

0

Изменение You объявление класса загрузки из

private class NetCheck extends AsyncTask{ 
} 

быть как

private class NetCheck extends AsyncTask<String,Void,String>{ 
} 

и то же самое в случае другого AsyncTask

private class ProcessLogin extends AsyncTask{ 
} 

быть как

private class ProcessLogin extends AsyncTask<String,Void,String>{ 
} 

потому AsyncTask потребности определить 3 универсальных типов следующим образом:

AsyncTask<Params, Progress, Result> 
Смежные вопросы