2016-03-13 4 views
1

Я создаю приложение для Android, которое может удалять данные из JSON с помощью HTTP DELETE. Но я столкнулся с проблемой. Я создал 2 разных файла. Один из MainActivity и другой из Async.Невозможно найти метод в моем классе Async

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    onClickButtonListner(); 
} 

public void onClickButtonListner() { 
    final Button btn = (Button) findViewById(R.id.delete_btn); 
    final String URL = myurl; 
    btnDelete.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Async asyn = new Async(URL); 
        asyn.execute(); 
       } 
      }); 
} 
} 

Async.java

public class Async extends AsyncTask<Void, Void, String> { 
String murl; 
public Async(String url) { 
    murl = url; 
} 

@Override 
protected String doInBackground(Void... params) { 
    HttpURLConnection httpURLConnection; 
    URL url ; 
    try { 
     final EditText id= (EditText)findViewById(R.id.delete_id); 
     **showing unable to resolve method findViewById** 
     String delete_url = murl + "/" + id.getText().toString(); 
     url = new URL(delete_url); 
     httpURLConnection = (HttpURLConnection) url.openConnection(); 
     httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     httpURLConnection.setRequestMethod("DELETE"); 
     httpURLConnection.connect(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
} 

}

Так что моя проблема в том, что мой класс Асинхронный показывает Невозможно найти метод findViewById.

Так, пожалуйста, помогите мне, как решить эту проблему Спасибо

ответ

1

Попробуйте изменить свой код, как показано ниже:

MainActivity.java

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
setSupportActionBar(toolbar); 
onClickButtonListner(); 
} 

public void onClickButtonListner() { 
final Button btn = (Button) findViewById(R.id.delete_btn); 
final String URL = myurl; 
final EditText id= (EditText)findViewById(R.id.delete_id); 
btnDelete.setOnClickListener(
     new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Async asyn = new Async(URL,id.getText().toString()); 
       asyn.execute(); 
      } 
     }); 
} 
} 

Async.java

public class Async extends AsyncTask<Void, Void, String> { 
String murl,id; 
public Async(String url,String _id) { 
    murl = url; 
    id=_id; 
} 

@Override 
protected String doInBackground(Void... params) { 
    HttpURLConnection httpURLConnection; 
    URL url ; 
    try { 
     String delete_url = murl + "/" + id; 
     url = new URL(delete_url); 
     httpURLConnection = (HttpURLConnection) url.openConnection(); 
     httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
     httpURLConnection.setRequestMethod("DELETE"); 
     httpURLConnection.connect(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(String result) { 
    super.onPostExecute(result); 
} 
} 
+0

Спасибо @pRaNaY Теперь я также хочу реализовать GET, POST, PUT, используя одиночную AsyncTask. В настоящее время у меня разные AsyncTask для каждого GET, POST, PUT. Так скажи мне, как переключаться между этим. Значит, когда я нажимаю Обновить, чем метод обновления в async-задании, будет запущен и т. Д. – Ghost

+0

Можете ли вы мне помочь – Ghost

+0

Вы можете добавить новый параметр в конструктор Asynk для реализации другого метода. например: 'public Async (String url, String _id, String methodType) {..}' и использовать тип метода в 'doInBackground'. – pRaNaY

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