2013-08-29 3 views
0

두 개의 열 _idname이있는 SQlite 테이블이 있습니다.R.string에서 문자열 리소스를 가져올 수 없습니다. *

String column = myCursor.getString(myCursor.getColumnIndex(MainDb.NAME)); 

int resId = getApplicationContext().getResources().getIdentifier(column, "strings", getApplicationContext().getPackageName()); 

String buttonText; 

if (resId != 0) 
{ 
    buttonText = getApplicationContext().getString(resId); 
} else 
{ 
    buttonText = "Resource is null!"; 
} 

resId가 나는 디버거를 확인했지만, 0 변수 column 오른쪽 값이 항상 : 국제화 목적을 위해 나는 가 지금은 R.string.today과 관련된 문자열 리소스를 얻으려면 R.string.today 같은 이름을 저장합니다. resId에서 다른 변형을 시도했습니다. :

  1. defType에서 "strings"대신 "string"을 시도했습니다. Resources.getSystem() 등의 GetResources의
  2. 다른 변화 ... getPackageName의
  3. 다른 변화() 내가 잘못

을하고있어 무엇?

+0

를 사용해보십시오.에는 getString (R.string.MYSTRING를)'? – avalancha

+0

getResources()는 액티비티 컨텍스트가 필요함 'String s = getResources(). getString (R.string.today)' – Raghunandan

+0

'R.string.today' 대신'today' 만 사용하려고 했습니까? – Trinimon

답변

1

가 나는 string 대신 strings해야한다고 생각 : column의 값이 strings.xml에 식별자를 dsignates

int resId = getApplicationContext().getResources() 
      .getIdentifier(column, "string", getApplicationContext().getPackageName()); 

확인뿐만 아니라 여부.

This이 좋은 예입니다.

p.s. : R.string.today 대신 today을 저장하거나 storeR.string.today에서 추출하기 만하면됩니다.

Resources r = getResources(); 
r.getIdentifier("today", "string", getPackageName())); 
r.getIdentifier("R.string.today", "string", getPackageName())); // doesn't work 
r.getIdentifier("R.string.today".replaceAll(".*\\.", ""), "string", getPackageName())); 

첫 번째 및 세 번째 작업. 당신은 단지`INT 잔유 = getApplicationContext().의 GetResources()를 사용하지 않는 이유

+0

흥미 롭습니다! 저녁에 시험해 보겠습니다. –

+1

고맙습니다. 해결책 이군요! –

0

... 난 당신의 조각을 얻을하지 않지만 어쩌면이

String str = context.getString(R.string.resId); 
+0

예제에서 resId는 항상 0이므로이 값은 작동하지 않습니다. –

+1

resId는 yourString을 의미합니다. R.string.yourString –

관련 문제