2013-02-15 7 views
6

Sto usando un solo progetto per lite porto e le versioni complete per questo io sono solo l'aggiornamento nomi dei pacchetti file manifesto.Come ottenere il nome del pacchetto o classe di origine file in Android?

La mia struttura del progetto è come questo

My App
& thinsp; & thinsp; & thinsp; & thinsp; & thinsp; | _src
& thinsp; & thinsp; & thinsp; & Thinsp; & Thinsp; & Thinsp; | _com.example.myapp
& thinsp; & thinsp; & thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; & Thinsp; | _MyClass.java

ei miei nomi dei pacchetti manifesto sono diversi.

package = "com.example.myapplite"

Sto usando un progetto libreria che voglio i nomi dei pacchetti di classi che sto usando in MyApp.

Ho usato questo

 System.out.println("Package Name " + context.getPackageName()); 

Ma i suoi darmi il personale un manifesto pacchetto di file valore del nome es. com.example.myapplite

voglio nomi dei pacchetti MyClass.java. vale a dire. com.example.myapp

Anche io sono a conoscenza di questo

MyClass mClass = new MyClass(); 
Package pack = mClass.getClass().getPackage(); 

Ma non posso usare questo approccio perché sto usando approccio volgende per ottenere file di classe nel mio progetto di biblioteca

Class c = Class.forName("package_name.MyClass"); 

Come ottenere i nomi dei pacchetti o il file MyClass.java di programmazione?

+1

uso Prova questo:. YourClass.class.getPackage() getName(); – Martin

+0

non è chiaro il motivo per cui devi usare 'new MyClass(). GetClass()' (effectief) Piuttosto che solo 'MyClass.class' ... o perché questo non è abbastanza per voi. La vostra spiegazione di usare 'Class.forName' in realtà non spiega quello che stai cercando di fare. Cosa * desiderio * Si potrebbe fare che 'Class.getPackage()' non fa per te? –

+0

Sto usando progetto della libreria da utilizzare MyClass nel mio progetto di biblioteca ho bisogno di accedervi Class.forName ("package_name.MyClass"); Perché progetto di biblioteca docente consapevoli di MyClass.java – Mac

risposta

8

È possibile che vengano assist piena

package org.kodejava.example.lang; 
import java.util.Date; 

public class ObtainingPackageName { 
public static void main(String[] args) { 
    // 
    // Create an instance of Date class, and then obtain the class package 
    // name. 
    // 
    Date date = new Date(); 
    Package pack = date.getClass().getPackage(); 
    String packageName = pack.getName(); 
    System.out.println("Package Name = " + packageName); 

    // 
    // Create an insatnce of our class and again get its package name 
    // 
    ObtainingPackageName o = new ObtainingPackageName(); 
    packageName = o.getClass().getPackage().getName(); 
    System.out.println("Package Name = " + packageName); 
    } 
} 
+0

Uso il progetto di libreria in modo da non creare oggetti di MyClass prima di accedervi. Sto usando Class.forName ("nome_pacchetto.MyClass"); per accedere a quella classe per questo ho bisogno del nome del pacchetto. – Mac

+1

Si noti che Class.getPackage() può restituire null se il programma di caricamento classi per la classe non registra il pacchetto. Questo è tipicamente fatto all'interno di ClassLoader usando ClassLoader.definePackage(). Puoi vederlo in azione, ad esempio in URLClassLoader. Se non stai installando un ClassLoader personalizzato, non dovresti avere alcun problema poiché il ClassLoader predefinito definirà i pacchetti durante il caricamento delle classi. – Timmos

+0

Qual è l'output? – winklerrr

2

provare questo,

try { 
     Class c = Class.forName("package_name.MyClass"); 

     Object o = c.newInstance(); 

     Package p = o.getClass().getPackage(); 

     System.out.println("Package Name :: " + p.getName()); 

    } catch (ClassNotFoundException e) {    
     e.printStackTrace(); 
    } catch (InstantiationException e) {    
     e.printStackTrace(); 
    } catch (IllegalAccessException e) {    
     e.printStackTrace(); 
    } 
+0

Questa soluzione sembra essere buona, ma c'è un modo per ottenere il nome del pacchetto per questo senza creare una nuova istanza? –

+0

@FelipeMosso usa semplicemente '.getClass(). GetPackage(). GetName()' in ogni istanza o usa '[YourClassName] .class.getPackage(). GetName()' – winklerrr

0
String packageName = this.getClass().getPackage().getName(); 

funzionerà sicuramente.

0

semplice esempio di una certa classe NotificationListener:

Timber.d(NotificationListener.class.getPackage().getName()); 
Timber.d(NotificationListener.class.getSimpleName()); 
Timber.d(NotificationListener.class.getName()); 

uscita:

D/PermissionsUtil: com.example.receivers 
D/PermissionsUtil: NotificationListener 
D/PermissionsUtil: com.example.receivers.NotificationListener 
Problemi correlati