【问题标题】:Cannot resolve method onActivityResult无法解析方法 onActivityResult
【发布时间】:2023-03-31 18:02:02
【问题描述】:

我正在尝试创建一个应用程序,允许将图片和视频从画廊分享到 facebook。我的代码在这行代码中弹出错误(以红色突出显示):“onActivityResult”、“getContentResolver”、“PlusShare”、“setType”、“addStream”、“setText”和“getIntent”说无法解析方法。完整编码如下:

MainActivity.java

package com.example.dothis.facebook;


import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

private static final int REQ_SELECT_PHOTO = 1;
private static final int REQ_START_SHARE = 2;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setResult(RESULT_OK);

    // listeners of our two buttons
    View.OnClickListener handler = new View.OnClickListener() {
        public void onClick(View v) {


            Button shareMediaButton = (Button)    findViewById(R.id.share_media);
            shareMediaButton.setOnClickListener(new   android.view.View.OnClickListener() {
                public void onClick(View v) {
                    Intent photoPicker = new     Intent(Intent.ACTION_PICK);
                    photoPicker.setType("video/*, image/*");
                    startActivityForResult(photoPicker, REQ_SELECT_PHOTO);
                }
            });

        }

        @Override
        protected void onActivityResult(int requestCode, int   resultCode, Intent intent) {
            super.onActivityResult(requestCode, resultCode, intent);

            if (requestCode == REQ_SELECT_PHOTO) {
                if (resultCode == Activity.RESULT_OK) {
                    Uri selectedImage = intent.getData();
                    ContentResolver cr = this.getContentResolver();
                    String mime = cr.getType(selectedImage);

                    PlusShare.Builder share = new  PlusShare.Builder(this);
                    share.setText("hello everyone!");
                    share.addStream(selectedImage);
                    share.setType(mime);
                    startActivityForResult(share.getIntent(),   REQ_START_SHARE);

                }
            }
        }

    }
   }

Android 清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.dothis.facebook" >

<uses-permission android:name="android.permission.INTERNET" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id" />


    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER"  />
        </intent-filter>
    </activity>
</application>

</manifest>

有人可以指导我如何解决这个问题吗?任何形式的建议都非常感谢。谢谢。

【问题讨论】:

    标签: java android facebook android-intent methods


    【解决方案1】:

    你引用 {} 的地方不对,你的 onCreate 方法 匿名类 View.OnClickListener 没有正确关闭 }

    下面是固定版本,引用正确。

    package com.example.dothis.facebook;
    
    
    import android.app.Activity;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    public class MainActivity extends Activity {
    
      private static final int REQ_SELECT_PHOTO = 1;
      private static final int REQ_START_SHARE = 2;
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setResult(RESULT_OK);
    
        // listeners of our two buttons
        View.OnClickListener handler = new View.OnClickListener() {
          public void onClick(View v) {
    
            Button shareMediaButton = (Button) findViewById(R.id.share_media);
            shareMediaButton.setOnClickListener(new android.view.View.OnClickListener() {
              public void onClick(View v) {
                Intent photoPicker = new Intent(Intent.ACTION_PICK);
                photoPicker.setType("video/*, image/*");
                startActivityForResult(photoPicker, REQ_SELECT_PHOTO);
              }
            });
    
          }
        };
      }
    
    
      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
    
        if (requestCode == REQ_SELECT_PHOTO) {
          if (resultCode == Activity.RESULT_OK) {
            Uri selectedImage = intent.getData();
            ContentResolver cr = this.getContentResolver();
            String mime = cr.getType(selectedImage);
    
            PlusShare.Builder share = new PlusShare.Builder(this);
            share.setText("hello everyone!");
            share.addStream(selectedImage);
            share.setType(mime);
            startActivityForResult(share.getIntent(), REQ_START_SHARE);
    
          }
        }
      }
    
    }
    

    【讨论】:

    • 谢谢@Derek Fung。 onActivityResult 和 getContentResolver 现在没有错误,但“PlusShare”、“setType”、“addStream”、“setText”和“getIntent”仍然以红色突出显示,我无法运行活动。有什么建议吗?
    • 这是错误信息::app:compileDebugJava /Users/geraldgoh/AndroidStudioProjects/Facebook/app/src/main/java/com/example/dothis/facebook/MainActivity.java:51: error : 包 PlusShare 不存在 PlusShare.Builder share = new PlusShare.Builder(this); ^ /Users/geraldgoh/AndroidStudioProjects/Facebook/app/src/main/java/com/example/dothis/facebook/MainActivity.java:51:错误:PlusShare 包不存在 PlusShare.Builder share = new PlusShare.Builder(this );
    • 您必须导入 PlusShare
    • 如果您尝试在 Google API 中使用 PlusShare,请在 import android.widget.Button; 下方添加行 import com.google.android.gms.plus.PlusShare;
    • 对不起,但我实际上想在 Facebook 上分享内容..所以意味着编码错误是吗? @德里克冯。抱歉,对于 Android 开发还是新手。
    【解决方案2】:

    试试这个代码,希望对你有帮助。

        Intent share = new Intent(Intent.ACTION_SEND);
        share.setType("image/jpeg");
        share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///sdcard/path/to/image.ext"));
    
        startActivity(Intent.createChooser(share, "Share Image"));
    

    【讨论】:

      【解决方案3】:

      首先你需要像这样修改你的Manifest.xml文件

      <uses-permission android:name="android.permission.CAMERA" />
      <uses-permission android:name="android.permission.FLASHLIGHT" />
      <uses-feature
              android:name="android.hardware.camera"
              android:required="false" />
      

      然后修改你的方法,如:

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          super.onActivityResult(requestCode, resultCode, data);
          if (requestCode == REQ_CODE) {
              if (resultCode == RESULT_OK) {
                  taken = true;
                  getContentResolver().notifyChange(uri, null);
                  ContentResolver cr = getContentResolver();
                  try {
                      bmp = MediaStore.Images.Media.getBitmap(cr, uri);
                      imagePhoto.setImageBitmap(bmp);
                      Toast.makeText(UserProfile.this, "Image has been saved to " + file.getAbsolutePath() + " as " + file.getName(), Toast.LENGTH_LONG).show();
      
                  } catch (Exception e) {
                      throw new RuntimeException(e.getMessage());
                  }
              } else if (resultCode == RESULT_CANCELED) {
                  taken = false;
                  Toast.makeText(UserProfile.this, "Action canceled", Toast.LENGTH_SHORT).show();
              }
          }
      }
      

      在你调用意图的地方输入这个:

      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "picture.jpg");
      uri = Uri.fromFile(file);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
      startActivityForResult(intent, REQ_CODE);
      

      我使用这些值使其工作

      private static final int REQ_CODE = 1152;
      public static final int MEDIA_TYPE_IMAGE = 1;
      public static final int MEDIA_TYPE_VIDEO = 2;
      

      希望对你有帮助!!!

      【讨论】:

        猜你喜欢
        • 2016-05-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 2015-06-10
        • 2019-08-28
        相关资源
        最近更新 更多