Home > Mobile >  Static class and setOnClicklistener with java
Static class and setOnClicklistener with java

Time:03-15

I want to execute a search command this way but indicate error, any other way to modify this

```public class UserActivity extends AppCompatActivity {
  private ImageView im;
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.userpage);
  im = (ImageView) findViewById(R.id.search);
  im.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
           SearchTask();
        }
   });
  static class SearchTask extends AsyncTask<Void, Void, Void>{
        //TO DO
    }
 }```

Unfortunately the static class always indicates an error that is:Method call expected

CodePudding user response:

SearchTask is a class and you need to instantiate it before use.

Replace

SearchTask();

with

final SearchTask cSearchTask = new SearchTask();
cSearchTask.execute(...);

PS: pay attention that AsyncTask are deprecated in newer Android 11 (The AsyncTask API is deprecated in Android 11. What are the alternatives?)

CodePudding user response:

Your AsyncTask Implementation is wrong

Example Snippet from SO answer

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
     protected Long doInBackground(URL... urls) {
         int count = urls.length;
         long totalSize = 0;
         for (int i = 0; i < count; i  ) {
             totalSize  = Downloader.downloadFile(urls[i]);
             publishProgress((int) ((i / (float) count) * 100));
             // Escape early if cancel() is called
             if (isCancelled()) break;
         }
         return totalSize;
     }

     protected void onProgressUpdate(Integer... progress) {
         setProgressPercent(progress[0]);
     }

     protected void onPostExecute(Long result) {
         showDialog("Downloaded "   result   " bytes");
     }
 }

Then use new DownloadFilesTask().execute(url1, url2, url3);

Change your code like so

im.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
           new SearchTask().execute(url1,url2,url3);
        }
   });

  • Related