1

在我的 Android 应用程序中,我需要将图像上传到 twitpic。但是我的代码中出现了运行时异常。这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    uploadImage = (Button) findViewById(R.id.uploadImage);
    uploadImage.setOnClickListener(new View.OnClickListener() {

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

private class ImageSender extends AsyncTask<URL, Integer, Long> {
    private String url;

    protected void onPreExecute() {
        mProgressDialog = ProgressDialog.show(MainActivity.this, "", "Sending image...", true);

        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
    }

    protected Long doInBackground(URL... urls) {
        long result = 0;

        TwitterSession twitterSession = new TwitterSession(MainActivity.this);
        AccessToken accessToken = twitterSession.getAccessToken();

        Configuration conf = new ConfigurationBuilder()
                .setOAuthConsumerKey(twitter_consumer_key)
                .setOAuthConsumerSecret(twitter_secret_key)
                .setOAuthAccessToken(accessToken.getToken())
                .setOAuthAccessTokenSecret(accessToken.getTokenSecret())
                .build();

        OAuthAuthorization auth = new OAuthAuthorization (conf, conf.getOAuthConsumerKey(), conf.getOAuthConsumerSecret(), new AccessToken (conf.getOAuthAccessToken(), conf.getOAuthAccessTokenSecret()));

        ImageUpload upload = ImageUpload.getTwitpicUploader (twitpic_api_key, auth);

        Log.d(TAG, "Start sending image...");

        try {
            String ExternalStorageDirectoryPath = Environment
                    .getExternalStorageDirectory()
                    .getAbsolutePath();

            String targetPath = ExternalStorageDirectoryPath + "/Friends/"+"/image2.jpg";     

            File targetDirector = new File(targetPath);
            url = upload.upload(new File(targetDirector.getAbsolutePath()));
            result = 1;

            Log.d(TAG, "Image uploaded, Twitpic url is " + url);    
        } catch (Exception e) { 
            Log.e(TAG, "Failed to send image");

            e.printStackTrace();
        }

        return result;
    }

    protected void onProgressUpdate(Integer... progress) {
    }

    protected void onPostExecute(Long result) {
        mProgressDialog.cancel();

        String text = (result == 1) ? "Image sent successfully.\n Twitpic url is: " + url : "Failed to send image";

        Toast.makeText(getApplicationContext(), text, Toast.LENGTH_LONG).show();
    }
}

在我的代码中有一个空指针在行

.setOAuthAccessToken(accessToken.getToken())

这是我的 TwitterSession 类:

public class TwitterSession {
    private SharedPreferences sharedPref;
    private Editor editor;

    private static final String TWEET_AUTH_KEY = "auth_key";
    private static final String TWEET_AUTH_SECRET_KEY = "auth_secret_key";
    private static final String TWEET_USER_NAME = "user_name";
    private static final String SHARED = "Twitter_Preferences";

    public TwitterSession(Context context) {
        sharedPref = context.getSharedPreferences(SHARED, Context.MODE_PRIVATE);

        editor = sharedPref.edit();
    }

    public void storeAccessToken(AccessToken accessToken, String username) {
        editor.putString(TWEET_AUTH_KEY, accessToken.getToken());
        editor.putString(TWEET_AUTH_SECRET_KEY, accessToken.getTokenSecret());
        editor.putString(TWEET_USER_NAME, username);

        editor.commit();
    }

    public void resetAccessToken() {
        editor.putString(TWEET_AUTH_KEY, null);
        editor.putString(TWEET_AUTH_SECRET_KEY, null);
        editor.putString(TWEET_USER_NAME, null);

        editor.commit();
    }

    public String getUsername() {
        return sharedPref.getString(TWEET_USER_NAME, "");
    }

    public AccessToken getAccessToken() {
        String token = sharedPref.getString(TWEET_AUTH_KEY, null);
        String tokenSecret = sharedPref.getString(TWEET_AUTH_SECRET_KEY, null);

        if (token != null && tokenSecret != null) 
            return new AccessToken(token, tokenSecret);
        else
            return null;
    }
}

我的日志是

03-27 11:47:34.427:E/AndroidRuntime(2676):致命异常:AsyncTask #1 03-27 11:47:34.427:E/AndroidRuntime(2676):java.lang.RuntimeException:执行 doInBackground 时发生错误() 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$3.done(AsyncTask.java:299) 03-27 11:47:34.427: E/AndroidRuntime(2676):在 java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.setException(FutureTask.java:219) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.run(FutureTask.java:239) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 03-27 11:47:34.427: E/AndroidRuntime(2676): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-27 11:47:34.427: E/AndroidRuntime( 2676): 在 java.lang.Thread.run(Thread.java:856) 03-27 11:47:34.427: E/AndroidRuntime(2676): 引起:java.lang.NullPointerException 03-27 11:47:34.427 : E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication。 MainActivity$ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47 :34.427: E/AndroidRuntime(2676): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多E/AndroidRuntime(2676): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.lang.Thread.run (Thread.java:856) 03-27 11:47:34.427: E/AndroidRuntime(2676): 由: java.lang.NullPointerException 03-27 11:47:34.427: E/AndroidRuntime(2676): at com. my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1 ) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多E/AndroidRuntime(2676): 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.lang.Thread.run (Thread.java:856) 03-27 11:47:34.427: E/AndroidRuntime(2676): 由: java.lang.NullPointerException 03-27 11:47:34.427: E/AndroidRuntime(2676): at com. my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1 ) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.lang.Thread.run(Thread.java:856) 03-27 11: 47:34.427: E/AndroidRuntime(2676): 引起: java.lang.NullPointerException 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity. java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/ AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.run(FutureTask. java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.lang.Thread.run(Thread.java:856) 03-27 11: 47:34.427: E/AndroidRuntime(2676): 引起: java.lang.NullPointerException 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity. java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/ AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.run(FutureTask. java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多E/AndroidRuntime(2676): at java.lang.Thread.run(Thread.java:856) 03-27 11:47:34.427: E/AndroidRuntime(2676): 引起:java.lang.NullPointerException 03-27 11 :47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com. my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/AndroidRuntime(2676): at android.os.AsyncTask$2.call(AsyncTask.java:287) 03- 27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ...还有 4 个E/AndroidRuntime(2676): at java.lang.Thread.run(Thread.java:856) 03-27 11:47:34.427: E/AndroidRuntime(2676): 引起:java.lang.NullPointerException 03-27 11 :47:34.427: E/AndroidRuntime(2676): at com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): at com. my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/AndroidRuntime(2676): at android.os.AsyncTask$2.call(AsyncTask.java:287) 03- 27 11:47:34.427: E/AndroidRuntime(2676): 在 java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ...还有 4 个E/AndroidRuntime(2676): 在 com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 com.my.androidtwitpicapplication.MainActivity $ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47: 34.427: E/AndroidRuntime(2676): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多E/AndroidRuntime(2676): 在 com.my.androidtwitpicapplication.MainActivity$ImageSender.doInBackground(MainActivity.java:78) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 com.my.androidtwitpicapplication.MainActivity $ImageSender.doInBackground(MainActivity.java:1) 03-27 11:47:34.427: E/AndroidRuntime(2676): 在 android.os.AsyncTask$2.call(AsyncTask.java:287) 03-27 11:47: 34.427: E/AndroidRuntime(2676): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多调用(AsyncTask.java:287)03-27 11:47:34.427:E/AndroidRuntime(2676):在 java.util.concurrent.FutureTask.run(FutureTask.java:234)03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多调用(AsyncTask.java:287)03-27 11:47:34.427:E/AndroidRuntime(2676):在 java.util.concurrent.FutureTask.run(FutureTask.java:234)03-27 11:47:34.427: E/AndroidRuntime(2676): ... 4 更多

我该如何解决这个问题?谢谢。

4

0 回答 0