2013-04-02 37 views
0

我有這個問題...參考R.java文件不能正常工作

我的Android應用程序有一個設置菜單設置IP地址和圖像。我可以使用正則表達式驗證IP地址,並在我的設備的根目錄中查找圖像,但想法是用戶設置的圖像必須替換應用程序主要活動中的默認圖像。這樣做,我宣佈一個ImageView的和初始化從R.java文件正確的ID(即包含默認圖像的一個),然後按照以下說明更換:

Bitmap bmap = BitmapFactory.decodeFile(selectedFile.getAbsolutePath()); 
Drawable dra = new BitmapDrawable(bmap); 
imagen.setImageDrawable(dra); 

哪裏imagen畫質是ImageView的目的。但由於某種原因,當我運行這段代碼時,logcat顯示imagen爲空......這意味着,我在上面的代碼的第三行中得到NullPointerException ...

這裏是完整的設置菜單中的活動代碼:

public class pantallaConfiguracion extends Activity{ 
    private static final int REQUEST_PICK_FILE = 1; 
    private EditText mFilePathTextView,ip; 
    private Button mStartActivityButton, volver, guardar; 
    private File selectedFile; 
    private ImageView imagen; 
    String dirIp; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.configuraciones); 
     ip = (EditText) findViewById(R.id.entradaIP); 
     volver = (Button) findViewById(R.id.botonVolver); 
     guardar = (Button) findViewById(R.id.botonGuardar); 
     mFilePathTextView = (EditText)findViewById(R.id.entradaImg); 
     mStartActivityButton = (Button)findViewById(R.id.botonBrowse); 
     imagen = (ImageView) findViewById(R.id.imagen1); 
     volver.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v) { 
       finish(); 
      } 
     }); 
     guardar.setOnClickListener(new OnClickListener(){ 
      @SuppressWarnings("deprecation") 
      public void onClick(View v) { 
       dirIp = ip.getText().toString(); 
       if(validarIp(dirIp) == false){ 
        Toast.makeText(getApplicationContext(), "Dirección IP incorrecta.", Toast.LENGTH_SHORT).show(); 
       }else{ 
        Main.IP_Server = dirIp; 
        descargarDatos.IP_Server = dirIp; 
        enviarDatos.IP_Server = dirIp; 
        Bitmap bmap = BitmapFactory.decodeFile(selectedFile.getAbsolutePath()); 
        Drawable dra = new BitmapDrawable(bmap); 
        imagen.setImageDrawable(dra); 
        Toast.makeText(getApplicationContext(), "Cambios Efectuados Correctamente.", Toast.LENGTH_SHORT).show(); 
       } 
      } 
      private boolean validarIp(String dirIp) { 
       String patron = "(([0-1]?[0-9]{1,2}\\.)|(2[0-4][0-9]\\.)|(25[0-5]\\.)){3}(([0-1]?[0-9]{1,2})|(2[0-4][0-9])|(25[0-5]))"; 
       Pattern expreg = Pattern.compile(patron); 
       Matcher m; 
       m = expreg.matcher(dirIp); 
       if(m.matches() == false){ 
        return false; 
       }else{ 
        return true; 
       } 
      } 
     }); 
     mStartActivityButton.setOnClickListener(new OnClickListener(){ 
      public void onClick(View v){ 
       switch(v.getId()) { 
       case R.id.botonBrowse: 
        Intent intent = new Intent(pantallaConfiguracion.this, FilePicker.class); 
        startActivityForResult(intent, REQUEST_PICK_FILE); 
        break; 
       default: 
        break; 
       } 
      } 
     }); 
    } 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode == RESULT_OK) { 
      switch(requestCode) { 
      case REQUEST_PICK_FILE: 
       if(data.hasExtra(FilePicker.EXTRA_FILE_PATH)) { 
        selectedFile = new File(data.getStringExtra(FilePicker.EXTRA_FILE_PATH)); 
        mFilePathTextView.setText(selectedFile.getPath());    
       } 
      } 
     } 
    } 
} 

這裏是logcat的輸出:

04-02 13:40:17.671: E/AndroidRuntime(3139): FATAL EXCEPTION: main 
04-02 13:40:17.671: E/AndroidRuntime(3139): java.lang.NullPointerException 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at tian.proto.pantallaConfiguracion$2.onClick(pantallaConfiguracion.java:73) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.view.View.performClick(View.java:2485) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.view.View$PerformClick.run(View.java:9080) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.os.Handler.handleCallback(Handler.java:587) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.os.Handler.dispatchMessage(Handler.java:92) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.os.Looper.loop(Looper.java:130) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at android.app.ActivityThread.main(ActivityThread.java:3687) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at java.lang.reflect.Method.invokeNative(Native Method) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at java.lang.reflect.Method.invoke(Method.java:507) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
04-02 13:40:17.671: E/AndroidRuntime(3139):  at dalvik.system.NativeStart.main(Native Method) 

預先感謝任何幫助,您可以給我!

+0

發佈你的logcat .. – Pragnani

+0

準備好了,我發佈了logcat –

+0

什麼是73號線在上面的代碼..? – Pragnani

回答

0

您無法從設置活動訪問主要活動中的圖像視圖。你可以做的是將圖像路徑保存在SharedPreference中,然後在主要活動的onResume()方法中查看屬性是否已設置,然後相應地實例化圖像。您可能需要添加一些緩存或以避免不必要的加載。