Существует BookView.class, который имеет частный метод, описанный нижеКак назвать частный метод класса в другом пакете
public class BookView{
private boolean importBook(String epubBookPath){
//The function that adds books to database.
}
}
Я пытаюсь вызвать эту функцию из другого пакета. Мой код
protected void onPostExecute(String file_url) {
// dismiss the dialog after the file was downloaded
dismissDialog(progress_bar_type);
/*Now we add the book information to the sqlite file.*/
TextView textView=(TextView)findViewById(R.id.textView1);
String filename = textView.getText().toString();
String baseDir = Environment.getExternalStorageDirectory().getAbsolutePath();
String epubBookPath = baseDir+filename;
Log.i("epubBookPath:",epubBookPath); //No errors till here!
try {
Method m=BookView.class.getDeclaredMethod("importBook");
m.setAccessible(true);//Abracadabra
//I need help from here! How do i pass the epubBookPath to the private importBook method.
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
Intent in = new Intent(getApplicationContext(),
CallEPubUIActivity.class);
startActivity(in);
}
EDIT:
я нашел еще один публичный метод в банке файл, который делает вышеуказанную работу.
public void jsImportBook(String epubBookPath) {
if (!BookView.this.importBook(epubBookPath))
return;
BookView.this.createBookshelf();
}
Частные методы являются частными по причине, поэтому никто за пределами класса не называет их. Вы не сможете это сделать, если не попытаетесь использовать рефлексию, и даже тогда я не уверен, что это сработает. – cmbaxter
Отражение - это путь, но никто на самом деле его не рекомендует: http://stackoverflow.com/questions/880365/any-way-to-invoke-a-private-method – andreih
Прочитайте [Вызывающие методы] (http://docs.oracle.com/javase/tutorial/reflect/member/methodInvocation.html) Сеанс [Oracle Reflection Trail] (http://docs.oracle.com/javase/tutorial/reflect/index.html). –