私はこのlinkからメソッドを呼び出す方法を学ぶだけですが、今は使用しようとしていますが、必要なロジックでは機能しません。 私は単にスレッドからメソッドを呼び出すだけです。スレッド内でメソッドを呼び出す
私は以下のコードを使用しています。しかし、ここでの問題はループです ループはクラスからすべてのメソッドをリストし、特定のメソッドが存在するかどうかを確認してから呼び出す必要があります。
Class myclass = Class.forName("com.package.MainActivity");
Method[] methods = myclass.getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("methodName")) {
Log.w(TAG, "Method Found!");
methods[i].invoke("methodName", "string data", 0123, 123, "string data");
}
}
私は以下のコードで簡単にしたいですが、その方法が見つからないことを私に伝え続けます。
Class c=Class.forName("com.package.MainActivity");
Method m=c.getMethod("methodName");
Object t = c.newInstance();
Object o= m.invoke(t,"string data", 0123, 123, "string data");
ERROR: java.lang.NoSuchMethodException: methodName []
は、私はまた、以下のコードを試してみましたが、それはまた、働いていないとエラーが言う:Can't create handler inside thread that has not called Looper.prepare()
Object carObj = Class.forName("com.package.MainActivity").newInstance();
Method method = carObj.getClass().getMethod("methodName");
method.invoke(method, "string data", 0123, 123, "string data");
私は以下に上記のすべてのコードをしています:
メインを方法を呼び出すべきクラス
public class MainActivity extends AppCompatActivity {
static MyHelper myHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button)findViewById(R.id.btnStart);
myHelper = new MyHelper(this);
myHelper.StartThread();
}
/*The Method to Invoke*/
public static void methodName(String data1, int var1, int var2, String data2){
//some code here...
}
}
私は現在、invokeメソッドについてのストックと完全に混乱しています私の機能の一部
public class MyHelper{
private Context context;
public MyHelper(Context context){
this.context = context;
}
public static void StartThread(){
TheThread theThread = new TheThread(context);
Thread t = new Thread(theThread);
t.start();
}
//Some code below
}
方法は
public class TheThread implements Runnable{
private Context context;
public TheThread(Context context){
this.context = context;
}
@Override
public void run(){
try{
String className = context.getClass().getName(); //The Class Name including its package.
//First Attempt
/*Class myclass = Class.forName(className);
Method[] methods = myclass.getMethods();
for (int i = 0; i < methods.length; i++) {
if (methods[i].getName().equals("methodName")) {
Log.w(TAG, "Method Found!");
methods[i].invoke("methodName", "string data", 0123, 123, "string data");
}
} */
//Second Attempt
/*Class c=Class.forName(className);
Method m=c.getMethod("methodName");
Object t = c.newInstance();
Object o= m.invoke(t,"string data", 0123, 123, "string data");*/
//Third attempt
/*Object carObj = Class.forName(className).newInstance();
Method method = carObj.getClass().getMethod("methodName");
method.invoke(method, "string data", 0123, 123, "string data"); */
}catch(Exception e){
Log.e("Invoke Error","Unable to invoke method => " + e.toString());
}
}
}
を起動する必要があるスレッドを含むスレッドを起動するための
ヘルパークラス。これをどうすれば解決できますか?私は最初の試みを好むわけではありません。なぜなら、呼び出す前に特定のメソッドをチェックするためにクラスからすべてのメソッドをリストする必要があるからです。
こんにちは!私はとても近いです、あなたは本当に混乱する部分を修正します。私はこの部分のパラメータ 'm.invoke(t、" string data "、0123、123、" string data ");を初期化するだけでよいと考えました。とにかく、私はエラーが発生していることを知っています: 'Looper.prepare()'を呼び出さなかったスレッドの中でハンドラを作成することはできませんが、すでに修正しました。将来の研究者にとっては、そのエラーを解決するコードを追加してください。私は他の人々がここに私が持っているコードを助けたいと思っています 'Activity activity =(Activity)context; アクティビティrunOnUiThread(新しいRunnableを(){ \t @Override \tます。public void実行(){ \t \t //メソッドを呼び出す \t}} ' – lopi
はありがとうございました!!! – lopi