2016-06-17 19 views
11

Hầu như mọi thứ trong hoạt động của tôi đều hoạt động tốt, ngoại trừ bất kỳ nơi nào được tham chiếu TAG. TAG nhận đường màu đỏ và nói: 'TAG' has private access in 'android.support.v4.app.FragmentActivity'. Tôi không biết gì về điều này, vì vậy hãy giúp tôi ở đây.'TAG' có quyền truy cập riêng tư trong 'android.support.v4.app.FragmentActivity'

MainActivity (không có hàng nhập khẩu) -

public class MainActivity extends AppCompatActivity { 
    public static final String DATA_PATH = Environment 
      .getExternalStorageDirectory().toString() + "/MainActivity"; 
    public static final String lang = "eng"; 

    protected Button _button; 
    protected ImageView _image; 
    protected TextView _field; 
    protected String _path; 
    protected boolean _taken; 

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

     String[] paths = new String[] { DATA_PATH, DATA_PATH + "tessdata/" }; 

     for (String path : paths) { 
      File dir = new File(path); 
      if (!dir.exists()) { 
       if (!dir.mkdirs()) { 
        Log.v(TAG, "ERROR: Creation of directory " + path + " on sdcard failed"); 
        return; 
       } else { 
        Log.v(TAG, "Created directory " + path + " on sdcard"); 
       } 
      } 

     } 

     if (!(new File(DATA_PATH + "tessdata/" + lang + ".traineddata")).exists()) { 
      try { 

       AssetManager assetManager = getAssets(); 
       InputStream in = assetManager.open("tessdata/" + lang + ".traineddata"); 
       //GZIPInputStream gin = new GZIPInputStream(in); 
       OutputStream out = new FileOutputStream(DATA_PATH 
         + "tessdata/" + lang + ".traineddata"); 

       // Transfer bytes from in to out 
       byte[] buf = new byte[1024]; 
       int len; 
       //while ((lenf = gin.read(buff)) > 0) { 
       while ((len = in.read(buf)) > 0) { 
        out.write(buf, 0, len); 
       } 
       in.close(); 
       //gin.close(); 
       out.close(); 

       Log.v(TAG, "Copied " + lang + " traineddata"); 
      } catch (IOException e) { 
       Log.e(TAG, "Was unable to copy " + lang + " traineddata " + e.toString()); 
      } 
     } 

     _image = (ImageView) findViewById(R.id.image); 
     _field = (TextView) findViewById(R.id.field); 
     _button = (Button) findViewById(R.id.button); 
     _button.setOnClickListener(new ButtonClickHandler()); 

     _path = Environment.getExternalStorageDirectory() + "/Login Data.jpg"; 
    } 

    public class ButtonClickHandler implements View.OnClickListener 
    { 
     public void onClick(View view){ 
      startCameraActivity(); 
     } 
    } 

    protected void startCameraActivity() 
    { 
     File file = new File(_path); 
     Uri outputFileUri = Uri.fromFile(file); 

     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); 

     startActivityForResult(intent, 0); 
    } 

    protected void onPhotoTaken() 
    { 
     _taken = true; 

     BitmapFactory.Options options = new BitmapFactory.Options(); 
     options.inSampleSize = 4; 

     Bitmap bitmap = BitmapFactory.decodeFile(_path, options); 
     _image.setImageBitmap(bitmap); 

     _field.setVisibility(View.GONE); 

     ExifInterface exif = new ExifInterface(_path); 

     int exifOrientation = exif.getAttributeInt(
       ExifInterface.TAG_ORIENTATION, 
       ExifInterface.ORIENTATION_NORMAL); 

     int rotate = 0; 

     switch (exifOrientation) { 
      case ExifInterface.ORIENTATION_ROTATE_90: 
       rotate = 90; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_180: 
       rotate = 180; 
       break; 
      case ExifInterface.ORIENTATION_ROTATE_270: 
       rotate = 270; 
       break; 
     } 

     if (rotate != 0) { 
      int w = bitmap.getWidth(); 
      int h = bitmap.getHeight(); 

      // Setting pre rotate 
      Matrix mtx = new Matrix(); 
      mtx.preRotate(rotate); 

      // Rotating Bitmap & convert to ARGB_8888, required by tess 
      bitmap = Bitmap.createBitmap(bitmap, 0, 0, w, h, mtx, false); 
     } 
     bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true); 

     TessBaseAPI baseApi = new TessBaseAPI(); 
     baseApi.init(DATA_PATH, lang); 
     baseApi.setImage(bitmap); 
     String recognizedText = baseApi.getUTF8Text(); 
     baseApi.end(); 
    } 

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     outState.putBoolean(MainActivity.PHOTO_TAKEN, _taken); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) 
    { 
     Log.i("MakeMachine", "onRestoreInstanceState()"); 
     if(savedInstanceState.getBoolean(MainActivity.PHOTO_TAKEN)) { 
      onPhotoTaken(); 
     } 
    } 
+0

Xem mã nguồn của [FragmentActivity] (https://github.com/android/platform_frameworks_support/blob/master/v4/java/android/support/v4/app/FragmentActivity.java#L82) và bạn sẽ xem 'TAG' trên dòng 82 là riêng tư. –

+0

vì vậy tôi có nên công khai không? –

+0

có vẻ như bị khóa –

Trả lời

22

Bạn nên xác định một hằng số cho thẻ của bạn trong MainActivity:

private static final String TAG = "MainActivity" 
+0

Cảm ơn! Nó đã làm việc! –

5

hãy thử như sau

private static final String TAG = MainActivity.class.getSimpleName(); 

Bạn có thể sử dụng lĩnh vực này trong bất kỳ Hoạt động hoặc Phân đoạn nào của bạn.

Các vấn đề liên quan