Farzad Sarseifi

مدیریت انجمن
  • تعداد ارسال ها

    1,722
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    85

تمامی ارسال های Farzad Sarseifi

  1. لاگ ارور رو بدین چک کنیم
  2. میتواند خیلی محترمانه از توسعه دهنده اون یکی برنامه بخواهید که متن شو عوض کنه. و گرنه راهی نیس
  3. این کده کامل نیست.فقط روش نوشتنش رو بهتون گفتم.. روال ساخت به این صورته که : اندازه عرض صفحه نمایش رو براساس dp میگیرید مثلا فرض کنید عرض گوشی شما 200 میباشد در مرحله دوم یک شمارنده counter بزارید برای اینکه بدونید counter از عرض صفحه کمتر میباشد یا خیر.اگر کمتر بود کنترل را اضافه کند در غیر اینصورت یک Layout دیگر ایجاد شود اندازه رو براساس کلاس Pint بدست میارید کار زیاد پیچیده ای نیستش میتونید راحت پیاده سازیش کنید
  4. به کافه بازار اطلاع دهید و مشکل رو بگید بهشون حتما پیگیری میکنند
  5. از اندروید 4.4 بالا باید به این روش فایل رو انتخاب کنید Intent intent = new Intent(); intent.setType("*/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select File"),1);
  6. لاگ ارورتون چی هستش که اطلاعات رو بارگذاری نمیکنه؟
  7. این روش رو امتحان کنید لایوت اداپتر : <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="60dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="60dp"> <TextView android:id="@+id/txt_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="30dp" android:text="@string/date_action" /> <TextView android:id="@+id/txt_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="20dp" android:layout_toLeftOf="@+id/txt_date" android:text="@string/time_action" /> <TextView android:id="@+id/txt_details" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginRight="50dp" android:layout_marginTop="10dp" android:layout_toLeftOf="@+id/txt_time" android:text="@string/details" /> <Button android:id="@+id/btn_delete" android:layout_width="60dp" android:layout_height="40dp" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_marginLeft="5dp" android:text="@string/delete" /> </RelativeLayout> <TextView android:id="@+id/txt_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" /> </RelativeLayout> کلاس اداپتر : import android.content.Context; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import com.gamadesk.Database.ActionDbAdapter; import com.gamadesk.Model.Action; import com.gamadesk.Model.Inbox; import com.gamadesk.R; import java.util.ArrayList; import java.util.List; /** * Created by Farzad Sarseify on 11/16/2015. */ public class ActionAdapter extends RecyclerView.Adapter<ActionAdapter.ViewHolder> { private List<Action> items; private static Context m_context; private static ArrayList<Inbox> arrayList; private static String videoFileName; private static String path; private static String txt_id; private int position; Action item; ActionDbAdapter actionDbAdapter; int pos; public ActionAdapter(List<Action> items, Context context) { this.items = items; m_context = context; actionDbAdapter=new ActionDbAdapter(context); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.action_list_row, parent, false); return new ViewHolder(v); } @Override public void onBindViewHolder(final ViewHolder holder, final int position) { item = items.get(position); holder.txt_date.setText(item.getADate()); holder.txt_time.setText(item.getATime()); // holder.txt_type_action.setText(item.getType_Id()); String detail=item.getDetails(); holder.txt_details.setText(detail); holder.txt_id.setText(item.getId() + ""); pos=position; holder.btn_delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { long ret=actionDbAdapter.DeleteAction(holder.txt_id.getText().toString()+""); if(ret>0){ //removeAt(pos-1); removeAt(position); } //notifyDataSetChanged(); } }); holder.itemView.setTag(item); } public void removeAt(int position) { items.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, items.size()); } @Override public int getItemCount() { return items.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { public TextView txt_id, txt_date, txt_time, txt_details, txt_flowId; Button btn_delete; public ViewHolder(View itemView) { super(itemView); txt_id = (TextView) itemView.findViewById(R.id.txt_id); txt_date = (TextView) itemView.findViewById(R.id.txt_date); txt_time = (TextView) itemView.findViewById(R.id.txt_time); txt_details = (TextView) itemView.findViewById(R.id.txt_details); btn_delete = (Button) itemView.findViewById(R.id.btn_delete); } } } نمایش RecyclerView در اکتیویتی actionArrayList=actionDbAdapter.getAllActions(); recyclerView.setHasFixedSize(true); recyclerView.setAdapter(new ActionAdapter(actionArrayList, getApplicationContext())); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.VERTICAL, false); recyclerView.setLayoutManager(linearLayoutManager); recyclerView.setItemAnimator(new DefaultItemAnimator());
  8. واسه اینکار باید اینکار رو کنید private void deleteItem(int position) { mDataSet.remove(position); notifyItemRemoved(position); notifyItemRangeChanged(position, mDataSet.size()); }
  9. بله حدس میزدم از زبان میباشد شما باید برای ویجت ها حتما خصوصیت زیر رو ست کنید تا جابجا نشود android:layout_alignParentLeft="true"
  10. خیر این انجام نمیشود.عدد اپدیت نمیشود. چه نیازی دارید که عدد کم شود؟ تا راهنمای کنم و مشکلتون رو حل کنم
  11. آیا زبان گوشی و جنی مونش یکی هستش؟ برای حالت های RTL و LTR
  12. باید یک فیلد از نوع Integer و AUTO_INCREMENT بسازید CREATE TABLE Persons ( ID Integer NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) );
  13. apk پروژه تون رو بزارید نصب کنیم که مشکل رو متوجه بشیم
  14. با این کد میتوانید مشکل رو حل کنید : داخل onCreate این کد رو بنویسید getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
  15. public void deleteEntry(long rowId) { database.delete(DATABASE_TABLE , KEY_ROWID + " = " + rowId, null);} فقط با شرط اسم فیلد این کار امکان پذیر میباشد
  16. ابتدا به آدرس زیر بروید : اسم پروژه و PackageName پروژه خودتون رو وارد کنید https://developers.google.com/mobile/add?platform=android&cntapi=signin&cntapp=Defaolt Demo App&cntpkg=com.google.samples.quickstart.signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fstart%3Fconfigured%3Dtrue&cntlbl=Continue with Try Sign-In در این مرحله میبایستی گزیه Choose and configure services رو انتخاب کنید و سپس Google Sign In : در مرحله بعد میبایستید sh1 خودتون رو بدست بیارید .به مسیر زیر بروید نصب جاوا برید و فایل keytool رو اجرا کنید keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android دستور مک و لینوکس : keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android خروجی : اطلاعات SHA1 را کپی کرده و در بخش پایین وارد میکنیم در مرحله آخر فایل google-services.json را دانلود کنید و در پروژه خودتون کپی کنید سپس در فایل build.gradle : بخش project level dependencies { classpath 'com.android.tools.build:gradle:2.1.0' classpath 'com.google.gms:google-services:3.0.0' } سپس در فایل build.gradle : بخش app-level apply plugin: 'com.google.gms.google-services' طراحی رابط کاربری : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" tools:context=".MainActivity" > <LinearLayout android:id="@+id/llProfile" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:orientation="horizontal" android:weightSum="3" android:visibility="gone"> <ImageView android:id="@+id/imgProfilePic" android:layout_width="80dp" android:layout_height="wrap_content" android:layout_weight="1"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:orientation="vertical" android:layout_weight="2" > <TextView android:id="@+id/txtName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="20dp" /> <TextView android:id="@+id/txtEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="5dp" android:textSize="18dp" /> </LinearLayout> </LinearLayout> <com.google.android.gms.common.SignInButton android:id="@+id/btn_sign_in" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="20dp"/> <Button android:id="@+id/btn_sign_out" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_logout_from_google" android:visibility="gone" android:layout_marginBottom="10dp"/> <Button android:id="@+id/btn_revoke_access" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/btn_revoke_access" android:visibility="gone" /> </LinearLayout> import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.bumptech.glide.Glide; import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.OptionalPendingResult; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = MainActivity.class.getSimpleName(); private static final int RC_SIGN_IN = 007; private GoogleApiClient mGoogleApiClient; private ProgressDialog mProgressDialog; private SignInButton btnSignIn; private Button btnSignOut, btnRevokeAccess; private LinearLayout llProfileLayout; private ImageView imgProfilePic; private TextView txtName, txtEmail; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in); btnSignOut = (Button) findViewById(R.id.btn_sign_out); btnRevokeAccess = (Button) findViewById(R.id.btn_revoke_access); llProfileLayout = (LinearLayout) findViewById(R.id.llProfile); imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic); txtName = (TextView) findViewById(R.id.txtName); txtEmail = (TextView) findViewById(R.id.txtEmail); btnSignIn.setOnClickListener(this); btnSignOut.setOnClickListener(this); btnRevokeAccess.setOnClickListener(this); GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this, this) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); // Customizing G+ button btnSignIn.setSize(SignInButton.SIZE_STANDARD); btnSignIn.setScopes(gso.getScopeArray()); } private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } private void signOut() { Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { updateUI(false); } }); } private void revokeAccess() { Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback( new ResultCallback<Status>() { @Override public void onResult(Status status) { updateUI(false); } }); } private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); Log.e(TAG, "display name: " + acct.getDisplayName()); String personName = acct.getDisplayName(); String personPhotoUrl = acct.getPhotoUrl().toString(); String email = acct.getEmail(); Log.e(TAG, "Name: " + personName + ", email: " + email + ", Image: " + personPhotoUrl); txtName.setText(personName); txtEmail.setText(email); Glide.with(getApplicationContext()).load(personPhotoUrl) .thumbnail(0.5f) .crossFade() .diskCacheStrategy(DiskCacheStrategy.ALL) .into(imgProfilePic); updateUI(true); } else { // Signed out, show unauthenticated UI. updateUI(false); } } @Override public void onClick(View v) { int id = v.getId(); switch (id) { case R.id.btn_sign_in: signIn(); break; case R.id.btn_sign_out: signOut(); break; case R.id.btn_revoke_access: revokeAccess(); break; } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } @Override public void onStart() { super.onStart(); OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); if (opr.isDone()) { // If the user's cached credentials are valid, the OptionalPendingResult will be "done" // and the GoogleSignInResult will be available instantly. Log.d(TAG, "Got cached sign-in"); GoogleSignInResult result = opr.get(); handleSignInResult(result); } else { // If the user has not previously signed in on this device or the sign-in has expired, // this asynchronous branch will attempt to sign in the user silently. Cross-device // single sign-on will occur in this branch. showProgressDialog(); opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { @Override public void onResult(GoogleSignInResult googleSignInResult) { hideProgressDialog(); handleSignInResult(googleSignInResult); } }); } } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { // An unresolvable error has occurred and Google APIs (including Sign-In) will not // be available. Log.d(TAG, "onConnectionFailed:" + connectionResult); } private void showProgressDialog() { if (mProgressDialog == null) { mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage(getString(R.string.loading)); mProgressDialog.setIndeterminate(true); } mProgressDialog.show(); } private void hideProgressDialog() { if (mProgressDialog != null && mProgressDialog.isShowing()) { mProgressDialog.hide(); } } private void updateUI(boolean isSignedIn) { if (isSignedIn) { btnSignIn.setVisibility(View.GONE); btnSignOut.setVisibility(View.VISIBLE); btnRevokeAccess.setVisibility(View.VISIBLE); llProfileLayout.setVisibility(View.VISIBLE); } else { btnSignIn.setVisibility(View.VISIBLE); btnSignOut.setVisibility(View.GONE); btnRevokeAccess.setVisibility(View.GONE); llProfileLayout.setVisibility(View.GONE); } } } دانلود مثال : G+Login.zip
  17. public Integer getCount() { int count = 0; String query = "select * from TABLE" ; SQLiteDatabase database = this.getReadableDatabase(); Cursor cursor = database.rawQuery(query, null); while (cursor.moveToNext()) { count++; } return count; } این کد بالا تعداد رو به شما برمیگردونه و میتوانید مقدار رو در هر ویجتی که میخواهید نمایش دهید
  18. بطور پیشفرض اینکار انجام نمیشود شما بایر اینکار رو انجام بدید عرض صفحه رو بگیرید براساس dp public static int getWidth(Activity activity) { Display display = activity.getWindowManager().getDefaultDisplay(); DisplayMetrics outMetrics = new DisplayMetrics (); display.getMetrics(outMetrics); float density = activity.getResources().getDisplayMetrics().density; float dpHeight = outMetrics.heightPixels / density; float dpWidth = outMetrics.widthPixels / density; return (int)dpWidth; } سپس وقت میخواهید کنترل رو بسازید باید چک کنید که آیا اندازه این کنترل از عرض صفحه بیشتر میشود یا نه.اگر بیشتر نشده بود کنترل اضافه میشود در غیر اینصورت باید یک لایوت جدید ایجاد شود int screenWidth = DisplayUtils.getWidth(getActivity()) - 100; Paint mPaint=new Paint(); mPaint.setTextSize(12); Typeface typeface = Typeface.createFromAsset(getActivity().getAssets(), "fonts/" + "tahoma.ttf"); mPaint.setTypeface(typeface); if (count <= screenWidth) { layout.addView(button); } else{ } شبیه همین باید بسازید
  19. حتما باید لایوت LinearLayout شما این خصوصیت رو ست کرده باشید android:orientation="vertical"
  20. لایوت اصلی تون رو اینجوری بنویسید : <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/layout" android:orientation="vertical"> </LinearLayout> </ScrollView>
  21. تصویر رو به این صورت بزارید : به عنون مثال box_stretch.9.png و از زاویه ای که میخواید تصویر بدون افت کیفیت کشیده بشه رو انتخاب کنید
  22. وقتی که یک instance از اکتیویتی تون میگیرید در داخل فرگمنت میتوانید به اکتیویتی دسترسی داشته باشد
  23. باید با notifyDataChanged بیاید و لیست رو اپدیت کنید
  24. if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); } else { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), 1); } @TargetApi(19) @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null && data.getData() != null && resultCode == RESULT_OK) { boolean isImageFromGoogleDrive = false; Uri uri = data.getData(); if (isKitKat && DocumentsContract.isDocumentUri(TestActivity.this, uri)) { if ("com.android.externalstorage.documents".equals(uri.getAuthority())) { String docId = DocumentsContract.getDocumentId(uri); String[] split = docId.split(":"); String type = split[0]; if ("primary".equalsIgnoreCase(type)) { imgPath = Environment.getExternalStorageDirectory() + "/" + split[1]; } else { Pattern DIR_SEPORATOR = Pattern.compile("/"); Set<String> rv = new HashSet<>(); String rawExternalStorage = System.getenv("EXTERNAL_STORAGE"); String rawSecondaryStoragesStr = System.getenv("SECONDARY_STORAGE"); String rawEmulatedStorageTarget = System.getenv("EMULATED_STORAGE_TARGET"); if(TextUtils.isEmpty(rawEmulatedStorageTarget)) { if(TextUtils.isEmpty(rawExternalStorage)) { rv.add("/storage/sdcard0"); } else { rv.add(rawExternalStorage); } } else { String rawUserId; if(Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { rawUserId = ""; } else { String path = Environment.getExternalStorageDirectory().getAbsolutePath(); String[] folders = DIR_SEPORATOR.split(path); String lastFolder = folders[folders.length - 1]; boolean isDigit = false; try { Integer.valueOf(lastFolder); isDigit = true; } catch(NumberFormatException ignored) { } rawUserId = isDigit ? lastFolder : ""; } if(TextUtils.isEmpty(rawUserId)) { rv.add(rawEmulatedStorageTarget); } else { rv.add(rawEmulatedStorageTarget + File.separator + rawUserId); } } if(!TextUtils.isEmpty(rawSecondaryStoragesStr)) { String[] rawSecondaryStorages = rawSecondaryStoragesStr.split(File.pathSeparator); Collections.addAll(rv, rawSecondaryStorages); } String[] temp = rv.toArray(new String[rv.size()]); for (int i = 0; i < temp.length; i++) { File tempf = new File(temp[i] + "/" + split[1]); if(tempf.exists()) { imgPath = temp[i] + "/" + split[1]; } } } } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) { String id = DocumentsContract.getDocumentId(uri); Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); Cursor cursor = null; String column = "_data"; String[] projection = { column }; try { cursor = TestActivity.this.getContentResolver().query(contentUri, projection, null, null, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(column); imgPath = cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } } else if("com.android.providers.media.documents".equals(uri.getAuthority())) { String docId = DocumentsContract.getDocumentId(uri); String[] split = docId.split(":"); String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } String selection = "_id=?"; String[] selectionArgs = new String[]{ split[1] }; Cursor cursor = null; String column = "_data"; String[] projection = { column }; try { cursor = TestActivity.this.getContentResolver().query(contentUri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(column); imgPath = cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } } else if("com.google.android.apps.docs.storage".equals(uri.getAuthority())) { isImageFromGoogleDrive = true; } } else if ("content".equalsIgnoreCase(uri.getScheme())) { Cursor cursor = null; String column = "_data"; String[] projection = { column }; try { cursor = TestActivity.this.getContentResolver().query(uri, projection, null, null, null); if (cursor != null && cursor.moveToFirst()) { int column_index = cursor.getColumnIndexOrThrow(column); imgPath = cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } } else if ("file".equalsIgnoreCase(uri.getScheme())) { imgPath = uri.getPath(); } if(isImageFromGoogleDrive) { try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri)); img.setImageBitmap(bitmap); } catch (Exception e) { e.printStackTrace(); } } else { File f = new File(imgPath); BitmapFactory.Options bmOptions = new BitmapFactory.Options(); Bitmap bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),bmOptions); img.setImageBitmap(bitmap); } } super.onActivityResult(requestCode, resultCode, data); } Sample a-computer-engineer-master.zip