0

我嘗試編寫可在Twitter上登錄的應用程序。我的圖書館是Twitter4j。該代碼一直運行,直到調用方法onResume。 的無法恢復登錄Twitter中的Activity..java.lang.NullPointerException

exception(Unable to resume Activity...NullPointerException)是在這條線的方法

onResume():

AccessToken acc = twitter.getOAuthAccessToken(requestToken,verifier); 

但我不明白的地方是我的錯誤。有人可以幫助我?

public class MainActivity extends Activity { 

    private Twitter twitter; 
    private RequestToken requestToken; 
    private static RequestToken re; 
    final public static String CALLBACK_URL = "app://casa"; 
    private RequestToken priv = null; 

    @SuppressLint("NewApi") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Button b = (Button) findViewById(R.id.button1); 

     b.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       new updateTwitterStatus().execute(); 

      } 
     }); 

    } 

    class updateTwitterStatus extends AsyncTask<Void, Void, String> { 

     @Override 
     protected String doInBackground(Void... params) { 
      String testStatus = "prova tweet "; 

      ConfigurationBuilder cb = new ConfigurationBuilder(); 

      cb.setDebugEnabled(true) 
        .setOAuthConsumerKey("******") 
        .setOAuthConsumerSecret(
          "*******"); 

      try { 
       TwitterFactory tf = new TwitterFactory(cb.build()); 
       twitter = tf.getInstance(); 
       Log.i("bauu", "miao"); 
       requestToken = twitter.getOAuthRequestToken(CALLBACK_URL); 
       String authUrl = requestToken.getAuthenticationURL(); 

       startActivity(new Intent(Intent.ACTION_VIEW, 
        Uri.parse(requestToken.getAuthenticationURL()))); 


       return authUrl; 

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

     @Override 
     protected void onPostExecute(String s) { 


     } 

    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Uri uri = this.getIntent().getData(); 
     Log.i("callback funziona", "ciao"); 
     if (uri != null && uri.toString().startsWith(CALLBACK_URL)) { 
      final String verifier = uri.getQueryParameter("oauth_verifier"); 

      // c 
      try { // the next line is the error's line 
       AccessToken acc = twitter.getOAuthAccessToken(requestToken, 
         verifier); 
      } catch (TwitterException e) { 

       e.printStackTrace(); 
      } 



     } 
    } 

回答

1

您只創建後的按鈕用戶點擊Twitter實例,但嘗試onResume()方法,它等於null與它合作。閱讀有關活動生命週期以避免此類錯誤https://developer.android.com/reference/android/app/Activity.html

+0

非常感謝我瞭解我的錯誤...但是我可以提供一些數據結構來避免此問題嗎? – francedema

+0

看看這個 - https://github.com/syndarin/SocNetApi。它使用Twitter4j。請注意,該項目是在Android 4.0發佈之前創建的,某處可能是UI線程中的網絡調用,這將導致Android 4.0及更高版本發生異常。 – Viacheslav