有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java select图片意图每次都不起作用

我试图在我的设置页面中设置一个首选项,允许用户搜索图像。选择图像后,我可以将其成功加载到ImageView中

所以我所做的就是在我的首选项中添加一个点击监听器

   incogPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                int PICK_IMAGE = 1;
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
                return false;
            }
        });

然而,这只适用于一次。第二次点击我的偏好时,我的意图没有显示出来。有什么想法吗

package 安卓.cast.thought.thoughtcasta;

import 安卓.app.Activity;
import 安卓.content.Context;
import 安卓.content.ContextWrapper;
import 安卓.content.Intent;
import 安卓.content.SharedPreferences;
import 安卓.content.pm.PackageInfo;
import 安卓.content.pm.PackageManager;
import 安卓.database.Cursor;
import 安卓.graphics.Bitmap;
import 安卓.graphics.BitmapFactory;
import 安卓.media.Image;
import 安卓.media.MediaScannerConnection;
import 安卓.media.ThumbnailUtils;
import 安卓.net.Uri;
import 安卓.os.Bundle;
import 安卓.os.Environment;
import 安卓.preference.CheckBoxPreference;
import 安卓.preference.Preference;
import 安卓.preference.PreferenceActivity;
import 安卓.preference.PreferenceManager;
import 安卓.preference.PreferenceScreen;
import 安卓.provider.MediaStore;
import 安卓.support.v7.widget.RecyclerView;
import 安卓.util.Log;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.ViewGroup;
import 安卓.view.ViewTreeObserver;
import 安卓.widget.Button;
import 安卓.widget.CheckBox;
import 安卓.widget.EditText;
import 安卓.widget.ImageView;
import 安卓.widget.LinearLayout;
import 安卓.widget.Toast;
import 安卓.support.v7.widget.Toolbar;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Calendar;
import java.util.Date;

import 安卓.cast.thought.thoughtcasta.MainActivity;

import com.squareup.picasso.Picasso;

public class Settings extends PreferenceActivity {
    private static final int PICK_PHOTO_FOR_AVATAR = 0;
    SharedPreferences.OnSharedPreferenceChangeListener prefListener;

    Preference incogPref;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.layout.activity_settings);

        final SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

        final SharedPreferences.Editor editor = pref.edit();

        LinearLayout root = (LinearLayout)findViewById(安卓.R.id.list).getParent().getParent().getParent();
        Toolbar bar = (Toolbar) LayoutInflater.from(this).inflate(R.layout.toolbar, root, false);
        root.addView(bar, 0); // insert at top
        bar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                finish();
            }
        });



        Preference xprefereces = findPreference("decativate");
        xprefereces.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                editor.putBoolean("loggedIn",false);
                Toast.makeText(Settings.this, "You have been logged out.", Toast.LENGTH_SHORT).show();
                editor.putBoolean("justLoggedOut",true);

                editor.apply();
                startActivity(new Intent(Settings.this, 安卓.cast.thought.thoughtcasta.MainActivity.class));

                return true;
            }
        });

        String versionString ="";

        String sessionId= getIntent().getStringExtra("firmware");

        Preference loggedInAs = findPreference("loggedInAs");
        loggedInAs.setTitle("Logged in as: " + pref.getString("loggedInAs", ""));
        try {
            PackageInfo pInfo = getApplicationContext().getPackageManager().getPackageInfo(getPackageName(), 0);
            versionString = pInfo.versionName;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        Preference version = findPreference("version");

        version.setTitle("ThoughtCast Version: " + versionString);

        final Preference lineWidth = findPreference(("linexx"));
        final Preference rotate = findPreference(("rotate"));
        final Preference autoSaveTimer = findPreference(("autoSaveTimer"));
        final Preference zoneRotates = findPreference(("zone_vibrate"));
        final CheckBoxPreference bLock = (CheckBoxPreference) findPreference(("buttonLock"));
        final CheckBoxPreference dVisible = (CheckBoxPreference) findPreference(("drawingAlwaysVisible"));
        final CheckBoxPreference cIncognito = (CheckBoxPreference) findPreference(("checkBoxIncognito"));
        final ImageView xImageView = (ImageView) findViewById(R.id.incognitoView);
        final Preference incButton = findPreference("incogitoImage");

            if(xImageView == null)
            {
                Log.d("FILEZ", " null " );

            }


        lineWidth.setTitle("Line Width: " + pref.getString("linexx", "2"));
        rotate.setTitle("Rotate Sensor Board: " + pref.getString("rotate", "0"));

        if(Integer.parseInt(pref.getString("autoSaveTimer", "2")) > 1) {
            autoSaveTimer.setTitle("Auto Save Timer: " + pref.getString("autoSaveTimer", "2") + " seconds");
        }
        else
        {
            autoSaveTimer.setTitle("Auto Save Timer: " + pref.getString("autoSaveTimer", "2") + " second");
        }
        zoneRotates.setTitle("Repeat Zone Vibrations: " + pref.getString("zone_vibrate", "5"));

       prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
            public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {

                Log.d("OKxx", "change: " + key);
                if(key.equals("checkBoxIncognito"))
                {
                    if(!(cIncognito.isChecked()))
                    {
                        Intent intent = new Intent();
                        intent.setType("image/*");
                        intent.setAction(Intent.ACTION_PICK);
                        int PICK_IMAGE = 1;
                        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
                    }
                }
                if(key.equals("linexx"))
                    lineWidth.setTitle("Line Width: " + pref.getString("linexx", "2"));
                if(key.equals("rotate"))
                    rotate.setTitle("Rotate Sensor Board: " + pref.getString("rotate", "0"));
                if(key.equals("autoSaveTimer"))
                    autoSaveTimer.setTitle("Auto Save Timer: " + pref.getString("autoSaveTimer", "2"));
                if(key.equals("zone_vibrate"))
                    zoneRotates.setTitle("Repeat Zone Vibrations: " + pref.getString("zone_vibrate", "5"));
                if(key.equals("drawingAlwaysVisible"))
                {
                   if(pref.getBoolean("drawingAlwaysVisible", false)) {

                        bLock.setChecked(false);
                        cIncognito.setChecked(false);

                   }
                }

                if(key.equals("incognito"))
                {
                    dVisible.setChecked(false);

                }
                if(key.equals("buttonLock"))
                {
                    if(pref.getBoolean("buttonLock", false)) {

                        dVisible.setChecked(false);
                    }
                }

            }
        };





        pref.registerOnSharedPreferenceChangeListener(prefListener);


        Preference problem = findPreference("problem");
        Preference feedback = findPreference("feedback");
       incogPref = findPreference("incognitoImage");




        findPreference("incognitoImage").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {


                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                int PICK_IMAGE = 1;
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
                return true;
            }
        });

        problem.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                problemP();
                return true;
            }
        });

        feedback.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                feedbackF();
                return true;
            }
        });

        Preference firmware = findPreference("firmware");


        PreferenceScreen screen = getPreferenceScreen();
        Preference prefx = getPreferenceManager().findPreference("firmware");



        if(sessionId.equals("disconnected")) {
            screen.removePreference(prefx);
        }
        else
        {
            firmware.setTitle("Firmware: " + sessionId);
        }

    }


    public void reload(View x)
    {



        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        int PICK_IMAGE = 1;
        startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);



    }


    public void test(View x)
    {





    }
    public void saveincognito(Bitmap bmp, String name) throws IOException {
        Date currentTime = Calendar.getInstance().getTime();


        String file_path = getApplicationContext().getFilesDir().getPath();


        File dir = new File(file_path);
        if(!dir.exists())
            dir.mkdirs();
        File file = new File(dir,   "incognito.jpg");



        FileOutputStream fOut = new FileOutputStream(file);

        bmp.compress(Bitmap.CompressFormat.JPEG, 90, fOut);
        fOut.flush();
        fOut.close();

        Log.d("FILEZ", file.toString());
        MediaScannerConnection.scanFile(this, new String[]{ file.getAbsolutePath() }, new String[]{"*/*"}, null);
    }




    public void problemP()
    {
        Uri uri = Uri.parse("mailto:support@thoughtcastapp.com");
        Intent myActivity2 = new Intent(Intent.ACTION_SENDTO, uri);
        myActivity2.putExtra(Intent.EXTRA_SUBJECT,
                "Problem");

        myActivity2.putExtra(Intent.EXTRA_TEXT, "What did you expect to happen:\n" +
                "How can we reproduce this error:\n" +
                "Your phone/tablet model:\n" +
                "Your phone/tablet OS version: \n" +
                "Your ThoughtCast version:\n" +
                "Any other info you think might help us solve your problem:");
        startActivity(myActivity2);

    }

    public void feedbackF()
    {
        Uri uri = Uri.parse("mailto:support@thoughtcastapp.com");
        Intent myActivity2 = new Intent(Intent.ACTION_SENDTO, uri);
        myActivity2.putExtra(Intent.EXTRA_SUBJECT,
                "Feedback");


        startActivity(myActivity2);
    }



    @Override
    protected void onResume() {
        super.onResume();



    }

    public void activate(View M)
    {


    }
    private String saveToInternalStorage(Bitmap bitmapImage){
        ContextWrapper cw = new ContextWrapper(getApplicationContext());
        // path to /data/data/yourapp/app_data/imageDir
        File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
        // Create imageDir
        File mypath=new File(directory,"profile.jpg");

        Log.d("OK", "new path + " + mypath.getAbsolutePath());

        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream(mypath);
            // Use the compress method on the BitMap object to write image to the OutputStream
            bitmapImage.compress(Bitmap.CompressFormat.JPEG, 100, fos);

            if(mypath.exists())
            {
                Log.d("OK", " exists " );

            }
            else

            {
                Log.d("OK", "doesn't exist " );

            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return directory.getAbsolutePath();
    }




    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
        Preference incogPref = findPreference("incognitoImage");




        if (resultCode == RESULT_OK) {
           final Uri selectedImage = imageReturnedIntent.getData();

            String[] filePathColumn = {MediaStore.Images.Media.DATA};
            SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
            SharedPreferences.Editor editor = pref.edit();
        //    editor.putString("incognito", selectedImage.toString());

            editor.apply();
            Log.d("OK", "worked " + selectedImage.toString());

            Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            String filePath = cursor.getString(columnIndex);
            cursor.close();

            ImageView ok = (ImageView)findViewById(R.id.incognitoView);

            ok.setImageURI(selectedImage);
            Bitmap bitmap = null;


            Bitmap test;
            try {
               bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), selectedImage);
            }
            catch (IOException iox)
            {

            }

            String path;
            Image image;

            if(bitmap!=null) {

                FileOutputStream outputStream;




                try {


                    saveincognito(bitmap, "ok");


                    ( (ImageView)findViewById(R.id.incognitoView)).setImageBitmap(bitmap);
                editor.apply();


                    setPreferenceScreen(null);
                    addPreferencesFromResource(R.layout.activity_settings);


                } catch (Exception fnf) {

                }

            }







        }

    }
}

共 (1) 个答案

  1. # 1 楼答案

    如果在代码侦听器中调用setPreferenceScreen(null)和addPreferencesFromResource(R.xml.preferences),则会删除。从资源添加首选项后,需要设置首选项ClickListener

       findPreference("incognitoImage").setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {
    
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                int PICK_IMAGE = 1;
                startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
                return false;
            }
        });
    

    如果不是解决办法。你应该和其他人分享你的喜好