-1

I am trying to put data that is fetched from server using restTemplate and AsyncTask into recyclerView. In the following code of MainActivity, I am checking server_response and it is showing correct size of server response, means upto getting data from server it is working fine but the return statement of AsyncTaskRunner is throwing error:

List<LinkedHashMap> server_response;

 private void initViews() {
        System.out.println("initViews fn");
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(layoutManager);


        server_response=prepareData();

        DataAdapter adapter = new DataAdapter(getApplicationContext(), server_response);
        recyclerView.setAdapter(adapter);
    }

    private List<LinkedHashMap> prepareData() {


      return (List<LinkedHashMap>) new AsyncTaskRunner().execute();

    }

private class AsyncTaskRunner extends AsyncTask<String, String, List<LinkedHashMap>> {

        @Override
        protected List<LinkedHashMap> doInBackground(String... params) {
            System.out.println("doInbg fn");
            publishProgress("geting Data");

            String username = "user";
            String password = "pass";
            String getAllItems = "http://172.16.xx.yy:8080/bptel/restGetAllItem";

            HttpAuthentication authHeader = new HttpBasicAuthentication(username, password);
            HttpHeaders requestHeaders = new HttpHeaders();
            requestHeaders.setAuthorization(authHeader);
            requestHeaders.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON));

            final RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter());


            ResponseEntity<List> responseEntity=restTemplate.exchange(getAllItems, HttpMethod.GET, new HttpEntity<Object>(requestHeaders), List.class);

            server_response=responseEntity.getBody();
            System.out.println("server response size is"+server_response.size());


                      return server_response;
        }

The error I am getting is

   FATAL EXCEPTION: main
Process: com.example.bptc, PID: 17047
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.bptc/com.example.bptc.MainActivity}: java.lang.ClassCastException: com.example.bptc.MainActivity$AsyncTaskRunner cannot be cast to java.util.List
   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
   at android.app.ActivityThread.-wrap12(ActivityThread.java)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:154)
   at android.app.ActivityThread.main(ActivityThread.java:6077)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
Caused by: java.lang.ClassCastException: com.example.bptc.MainActivity$AsyncTaskRunner cannot be cast to java.util.List
   at com.example.bptc.MainActivity.prepareData(MainActivity.java:131)

Please help me to cast response properly.

user1506104
  • 6,554
  • 4
  • 71
  • 89
ashok
  • 51
  • 2
  • 10
  • you are expecting List and passing server_response=responseEntity.getBody(); which is String . try to parse the json properly then send it as response. That's why you are facing casting exception. – Ankit Aman Oct 09 '17 at 07:26
  • if server_response is a string then how I am able to get size of server_response instead of length and also I am getting each item of server_response using server_reponse.get(position).get("key_name") ? – ashok Oct 09 '17 at 08:13

1 Answers1

0

Stacktrace says "AsyncTaskRunner cannot be cast to java.util.List", your code is doing:

return (List<LinkedHashMap>) new AsyncTaskRunner().execute();

don't you guys know how to read code anymore?

Alessio
  • 3,063
  • 1
  • 15
  • 17