2016-10-26 5 views
0

機能していないことは、私の主な活動アンドロイド:メソッドコールバックは、私はrelectionを使用して、メソッドコールバックを実装しようとしていますが、それは希望method.Hereを呼び出していません

public class MainActivity extends AppCompatActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     RetrofitCalls retrofitCalls = new RetrofitCalls(); 
     retrofitCalls.requestAccesstoken(); 
     retrofitCalls.requestDataFromServer(MainActivity.this,"onCountryListReceived"); 
    } 

    public void onCountryListReceived(JsonObject jsonObject) 
    { 
     String temp = "hello"; 
    } 
} 

であり、ここでrequestDataServer方法

public void requestDataFromServer(final Activity activity, final String callBackMethod){ 

    OkHttpClient okHttpClient = new OkHttpClient.Builder() 
      .addInterceptor(new HeaderInterceptor()) 
      .build(); 

    retrofit = new Retrofit.Builder() 
      .baseUrl(Constants.ROOT_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(okHttpClient) 
      .build(); 

    Api api = retrofit.create(Api.class); 
    Call<JsonObject> call = api.getDataFromServer(Constants.COUNTRY_LIST); 
    call.enqueue(new Callback<JsonObject>() { 
     @Override 
     public void onResponse(Call<JsonObject> call, Response<JsonObject> response) { 

      if(response.errorBody() != null){ 
       try { 
        String j1 = response.errorBody().string(); 
        String temp = "hello"; 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      }else if(response.body() != null) { 
       JsonObject jsonObject = response.body(); 
       JsonArray jsonArray = jsonObject.getAsJsonArray("Data"); 
       String temp = "hello"; 

       try { 
        String x = activity.getClass().toString(); 
        Method method = activity.getClass().getDeclaredMethod(callBackMethod.trim(),Object.class); 
        method.invoke(activity,jsonObject); 
       } catch (NoSuchMethodException e) { 
        e.printStackTrace(); 
       } catch (InvocationTargetException e) { 
        e.printStackTrace(); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     @Override 
     public void onFailure(Call<JsonObject> call, Throwable t) { 
      String temp = "hello"; 
     } 
    }); 
} 
です

なぜonCountryListReceivedが呼び出されないのですか?それはNoSuchMethodExceptionを与えています。どうしたの?

+0

このメソッドにはパラメータがありません。私は 'onCountryListReceived(Object result)'のように見えるか、または指摘のために何か – mihail

+0

ありがとうと思います。パラメータは渡されませんでした。 –

+0

ちょうどあなたがそれを固定した答えを投稿する、それは誰か他の人を助けることができる:) – mihail

答えて

0

Object.classの代わりに、getDeclaredMethodのJsonObject.classが、呼び出されるメソッドのパラメータであるため、渡されました。
getDeclaredMethodは2つのパラメータを受け入れます。
1.コールバックメソッド名2.そのメソッドのパラメータ。

関連する問題