2015-06-29 4 views
0

Это мой код Asyntask, который не стреляет onPostExecute() У любого есть идея, почему это может произойти ???Asyntask не выполняется onPostExecute()

EDIT: Asyntask называется так

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

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager = CallbackManager.Factory.create(); 

     setContentView(R.layout.activity_main); 
     . 
     . 
     textView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(getApplicationContext(), SignUp.class); 
       startActivity(intent); 
      } 
     }); 
     textView2.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       Intent intent = new Intent(getApplicationContext(), Feedback.class); 
       startActivity(intent); 
      } 
     }); 


     fbLoginButton = (LoginButton) findViewById(R.id.login_button); 
     fbLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
      @Override 
      public void onSuccess(LoginResult loginResult) { 
       token=loginResult.getAccessToken().getToken().toString(); 

       Log.v("tag", "Token:\n" + token); 
       try { 
        get_profile(); 
       }catch (Exception ex) { 
        String error = ex.getMessage(); 
       } 


      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(MainActivity.this, "Login cancelled by user!", Toast.LENGTH_LONG).show(); 
       System.out.println("Facebook Login failed!!"); 

      } 

      @Override 
      public void onError(FacebookException e) { 
       Toast.makeText(MainActivity.this, "Login unsuccessful!", Toast.LENGTH_LONG).show(); 
       System.out.println("Facebook Login failed!!"); 
      } 
     }); 
    } 

Метод get_profile(); определяется как этот

//Method to get profile details 
    public void get_profile() throws UnsupportedEncodingException { 
     try { 
      // Calling async task to get json 
      new FetchOperation().execute(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

Это находится внутри главного класса слишком

//Asynctask to get Getting fb profile details 
    private class FetchOperation extends AsyncTask<Void, Void, String> { 
     String fb_token; 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      // Get user defined values 
      fb_token = token; 


     } 

     @Override 
     protected String doInBackground(Void... params) { 
      String response = ""; 
      String Urls = "https://graph.facebook.com/me?access_token="; 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpGet httpget = new HttpGet(Urls +token); 
      HttpEntity httpEntity = null; 
      HttpResponse httpResponse = null; 
      try { 
       httpResponse = httpclient.execute(httpget); 

      } catch (ClientProtocolException e) { 
       e.printStackTrace(); 
       Log.v("Response", "Hi From e1 : " + e.toString()); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      try { 
       httpEntity = httpResponse.getEntity(); 
       response = EntityUtils.toString(httpEntity); 
       Log.v("Response", "Hi From 2 : "+response.toString()); 
       return response; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       Log.v("Response", "Hi From e2 : " + e.toString()); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(String jsonStr) { 
      super.onPostExecute(jsonStr); 
      Log.v("tag", "Result:" + jsonStr); 
      if (jsonStr != null) { 
       try{ 
        JSONObject jsonObj = new JSONObject(jsonStr); 
        String email = jsonObj.getString("email"); 
        String firstName = jsonObj.getString("first_name"); 
        String lastName = jsonObj.getString("last_name"); 
        String gender = jsonObj.getString("gender"); 
        String country = jsonObj.getString("locale"); 
        id = jsonObj.getString("id"); 
        user = firstName.concat(" "); 
        user = user.concat(lastName); 
        image = "http://graph.facebook.com/" + id + "/picture?type=large"; 
        Log.v("Fb name", "Bla bla Name : " + user); 
        new UploadOperation().execute(); 

       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      else { 
       Log.e("ServiceHandler", "Couldn't get any data from the url"); 
      } 
     } 
    } 

Это последние строки логарифма

06-29 14:30:49.927 2091-2091/com.example.kmi_dev.fbloginsample V/tag﹕ Token: 
    CA****************************************************************xr 
06-29 14:30:50.697 2091-2135/com.example.kmi_dev.fbloginsample V/Response﹕ Hi From 2 : {"id":"910***********6","first_name":"Shivanshu","gender":"male","last_name":"Verma","link":"https:\/\/www.facebook.com\/app_scoped_user_id\/910***********6\/","locale":"en_GB","name":"Shivanshu Verma","timezone":5.5,"updated_time":"2015-06-22T04:17:39+0000","verified":true} 
06-29 14:31:23.827 2091-2098/com.example.kmi_dev.fbloginsample W/art﹕ Suspending all threads took: 10ms 

Я намерен запустить еще одну асинтазу, которая затем сохранит данные, полученные этой асинтезой в базе данных.

+0

Как вы называете 'asynctask'? можете ли вы опубликовать эту часть кода? –

+0

@AbhishekV уже существует 'new UploadOperation(). Execute();' но проблема связана с текущей Asyntask. Этот метод не будет запускать метод onPostExecute() ' –

+0

N .. Я хотел знать, как вы вызываете асинтезу« FetchOperation ». Он вызван из прав интерфейса пользователя? –

ответ

1

сделать эти изменения, он будет работать -

  1. private class FetchOperation extends AsyncTask<Void, Void, String> изменения - private class FetchOperation extends AsyncTask<Void, String, String>, потому что, вы пытаетесь вернуть String.
  2. response = EntityUtils.toString(httpEntity); изменить на - response = EntityUtils.toString(httpEntity).toString(); на следующей строке этого вы на самом деле это сделали.
  3. В самом конце методы doInBackground где return null; изменения - return response;

4.No необходимо вызвать супер в onPostExecute()

5.Inside onPostExecute() проверить jsonStr является недействительной или нет и делать то, что вы хотите сделать, если null и если содержит данные json.

-1

Ваш JSONObject не содержит JSONString «электронная почта», так что падения на линии

String email = jsonObj.getString("email"); 

и идти прямо, чтобы поймать блок.

+0

Метод' onPostExecute() 'никогда не запускается, я даже не получаю консольную распечатку этого' Log.v («tag», «Result:» + jsonStr); ' нет ошибки, что бы то ни было. –

Смежные вопросы