Java 选择每次都不工作的图片
我正在尝试在我的设置页面中设置一个首选项,允许用户搜索图像。选择图像后,我可以在ImageView中成功加载它 所以我所做的就是在我的首选项中添加一个单击侦听器Java 选择每次都不工作的图片,java,android,Java,Android,我正在尝试在我的设置页面中设置一个首选项,允许用户搜索图像。选择图像后,我可以在ImageView中成功加载它 所以我所做的就是在我的首选项中添加一个单击侦听器 incogPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { public boolean onPreferenceClick(Preference preference) {
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 android.cast.thought.thoughtcasta;
import android.app.Activity;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.Image;
import android.media.MediaScannerConnection;
import android.media.ThumbnailUtils;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.preference.PreferenceScreen;
import android.provider.MediaStore;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.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 android.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(android.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, android.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) {
}
}
}
}
}
如果在代码侦听器中调用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;
}
});
如果不是解决方案,则应共享首选项类的其余部分。尝试使用
返回true代码>已尝试-不起作用。您能否在此显示,您是如何获得icongPref
?首选项incogPref=findPreference(“incognitoImage”);