简体   繁体   中英

Unable to fetch JSON data from Server

Unable to fetch data from server even i have value in textview as per my condition in onCreate() and when i remove this condition this works just fine for me (my mean, in that case i am able to fetch JSON data from Server).

and i tried many things but still no success for me, always getting "Unable to fetch data from server" because i used this as Toast in onPostExecute() method of AsyncTask

I am getting value for TextView and that's for sure its calling execute method of AsyncTask as well, but always getting Unable to fetch data from server

Do you have Questions in your mind :

1) Why I am using such condition in onCreate() , then check my this question

2) Why I am setting adapter in onPostExecute() , then check my this question

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_video_category);       

        etTextToSave = (TextView) findViewById(R.id.textView2);

        sharedprefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
        etTextToSave.setText(sharedprefs.getString("SharedPrefsData",""));      

        actorsList = new ArrayList<VideoCategory>(); 

        if(etTextToSave.getText().toString().length()>0)
        {               
            new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");            
        }               
        centerLockHorizontalScrollview = (HSVActivity) findViewById(R.id.scrollView);

    }

    class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

            ProgressDialog dialog;

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                dialog = new ProgressDialog(MainActivity.this);
                dialog.setMessage("Loading, please wait");
                dialog.setTitle("Connecting server");
                dialog.show();
                dialog.setCancelable(false);
            }

            @Override
            protected Boolean doInBackground(String... urls) {
                try {

                    //------------------>>
                    HttpGet httppost = new HttpGet(urls[0]);
                    HttpClient httpclient = new DefaultHttpClient();
                    HttpResponse response = httpclient.execute(httppost);

                    // StatusLine stat = response.getStatusLine();
                    int status = response.getStatusLine().getStatusCode();

                    if (status == 200) {
                        HttpEntity entity = response.getEntity();
                        String data = EntityUtils.toString(entity);


                        JSONObject jsono = new JSONObject(data);
                        JSONArray jarray = jsono.getJSONArray("actors");

                        for (int i = 0; i < jarray.length(); i++) {
                            JSONObject object = jarray.getJSONObject(i);

                            Actors actor = new Actors();

                            actor.setName(object.getString("name"));
                            Log.d("Name:", object.getString("name"));
                            actor.setImage(object.getString("image"));
                            Log.d("Image:", object.getString("image"));

                            actorsList.add(actor);
                        }
                        return true;
                    }

                    //------------------>>

                } catch (ParseException e1) {
                    e1.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                return false;
            }

            protected void onPostExecute(Boolean result) {
                dialog.cancel();                 
                if(result == false)
                    Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
                if(actorsList != null) {
                    adapter = new VideoCategoryAdapter(getApplicationContext(), R.layout.adapter_video_category, actorsList);      
                    centerLockHorizontalScrollview.setAdapter(HomeActivity.this, adapter);
                }
            }
        }

I am not getting any exception or toast message. Check the Json response.

在此处输入图片说明

As per your posted question , you get data form the server still you get Toast that "Unable to fetch data from server" . I done the small change in your code please try it and let me known .

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_video_category);       

    etTextToSave = (TextView) findViewById(R.id.textView2);

    sharedprefs = getSharedPreferences("MyPrefs", MODE_PRIVATE);
    etTextToSave.setText(sharedprefs.getString("SharedPrefsData",""));      

    actorsList = new ArrayList<VideoCategory>(); 

    if(etTextToSave.getText().toString().length()>0)
    {               
        new JSONAsyncTask().execute("http://microblogging.wingnity.com/JSONParsingTutorial/jsonActors");            
    }               
    centerLockHorizontalScrollview = (HSVActivity) findViewById(R.id.scrollView);

}

class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

        ProgressDialog dialog;
        JSONObject jObj;


        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            dialog = new ProgressDialog(MainActivity.this);
            dialog.setMessage("Loading, please wait");
            dialog.setTitle("Connecting server");
            dialog.show();
            dialog.setCancelable(false);
        }

        @Override
        protected Boolean doInBackground(String... urls) {
            try {

                //------------------>>
                HttpGet httppost = new HttpGet(urls[0]);
                HttpClient httpclient = new DefaultHttpClient();
                HttpResponse response = httpclient.execute(httppost);

                // StatusLine stat = response.getStatusLine();
                int status = response.getStatusLine().getStatusCode();

                if (status == 200) {
                    HttpEntity entity = response.getEntity();
                    String data = EntityUtils.toString(entity);


                    jObj = new JSONObject(data);

                   if(!(jObj.equals(null)))
                   {

                    JSONArray jarray = jsono.getJSONArray("actors");
                    for (int i = 0; i < jarray.length(); i++) {
                        JSONObject object = jarray.getJSONObject(i);

                        Actors actor = new Actors();

                        actor.setName(object.getString("name"));
                        Log.d("Name:", object.getString("name"));
                        actor.setImage(object.getString("image"));
                        Log.d("Image:", object.getString("image"));

                        actorsList.add(actor);

                     }
                   }
                    return true;
                }

                //------------------>>

            } catch (ParseException e1) {
                e1.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return false;
        }

        protected void onPostExecute(Boolean result) {
            dialog.cancel();                 
            if(jObj== null)
                Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();
            if(actorsList != null) {
                adapter = new VideoCategoryAdapter(getApplicationContext(), R.layout.adapter_video_category, actorsList);      
                centerLockHorizontalScrollview.setAdapter(HomeActivity.this, adapter);
            }
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM