1

지난 2 일 동안 RecyclerView를 설정하려고했지만 대부분이 의도 한대로 작동하는 것 같습니다. 내 응용 프로그램을 실행하려고 할 때마다 그러나, 그것은 치명적인 예외와 충돌 :

E/AndroidRuntime을 : 치명적인 예외 : 주요 프로세스 : com.mad.exercise5, PID : 16634 android.content.res. 자원 $의 NotFoundException : android.content.res.Resources.getText (Resources.java:342)에서 문자열 리소스 ID 번호 0x1로 android.support.v7.widget.ResourcesWrapper.getText (ResourcesWrapper.java:52) 에서 안드로이드에서 .widget.TextView.setText (TextView.java:4244) 에서 (...)

다음은 the slideview tutorials from YouTube, 1 부 1-4입니다. 자습서의 맥락에서, RecyclerView는 내가 아직 들어 가지 않은 조각에 설정되어 있습니다. 단지 주 활동에서 RecyclerView를 작성하여 오류가 발생한 경우를 대비하여 a tutorial at StackTips을 시도해 보았습니다.

최상의 방법으로 레이아웃 관리자 (mRecyclerView.setLayoutManager(new LinearLayoutManager(this));)를 설정하는 줄을 주석 처리하여 오류를 중지 할 수 있지만 오류는 onBindViewHolder에서 발생한 것 같습니다. 특히, 텍스트를 ViewHolder TextViews로 설정합니다.

Google 검색에서 오류를 조사하고 몇 가지 조사를 실시한 결과,이 오류가 다른 질문과 문제에서 나타났습니다. 그러나 문제는 항상 사용자가 리소스를 호출하지만 직접 ID로 참조하는 것으로 보입니다. 즉, 'String string = getString(R.string.string)'대신 'String string = R.string.string'을 사용합니다. 표준 리소스 구현을 세 번 확인 했으므로 아무 것도 놓치지 않았 음을 확신합니다. 지금까지 자습서를 통해 믿을 수있게되었지만 findViewById의 올바른 구현으로 TextView를 올바르게 인스턴스화했습니다. 주요 활동 컨텍스트는 초기화시 전달되므로 관련 ID를 찾는 데 문제가 없어야합니다.

RecyclerView 예제 작업에서 Resources $ NotFoundException을받는 이유는 무엇입니까? 다음과 같이 두 개의 관련 자바 클래스는 다음과 같습니다

MainActivity.java TextView

public class MainActivity extends AppCompatActivity { 

    private ArrayList<Train> mTrains; 
    private TrainAdapter mTrainAdapter; 
    private RecyclerView mRecyclerView; 

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

     // Create the Recycler View 
     mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view); 
     mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 

     mTrains = FillTrainData(); 
     mTrainAdapter = new TrainAdapter(this, mTrains); 
     mRecyclerView.setAdapter(mTrainAdapter); 
    } 

    private ArrayList<Train> FillTrainData() 
    { 
     ArrayList<Train> mTempTrainData = new ArrayList<>(); 
     String[] mPlatform = new String[]{"platA", "platB", "platC", "platD"}; 
     String[] mStatus = new String[]{"arrive", "notarrive"}; 
     String[] mDestination = new String[]{"destA", "destB", "destC", "destD"}; 
     String[] mDestinationTime = new String[]{"destA", "destB", "destC", "destD"}; 
     int[] mArrivalTime = new int[]{1,2,3,4}; 

     for(int i = 0; i < 4; i ++) 
     { 
      Train mTrain = new Train(mPlatform[i], mArrivalTime[i], mStatus[i%2], 
        mDestination[i], mDestinationTime[i]); 
      mTempTrainData.add(mTrain); 
     } 

     return mTempTrainData; 
    } 
} 

TranAdapter.java

public class TrainAdapter extends RecyclerView.Adapter<TrainAdapter.CustomViewHolder> { 

    private Context mContext; 
    private ArrayList<Train> mTrains; 

    public TrainAdapter(Context context, ArrayList<Train> trains) { 
     mContext = context; 
     mTrains = trains; 
    } 

    @Override 
    public CustomViewHolder onCreateViewHolder(ViewGroup parent, int index) { 
     View view = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.train_item, null); 
     CustomViewHolder viewHolder = new CustomViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(CustomViewHolder viewHolder, int position) { 
     Train currentTrain = mTrains.get(position); 

     viewHolder.platformText.setText(currentTrain.GetPlatform()); 
     viewHolder.arrivalTimeText.setText(currentTrain.GetArrivalTime()); 
     viewHolder.statusText.setText(currentTrain.GetStatus()); 
     viewHolder.destinationText.setText(currentTrain.GetDestination()); 
     viewHolder.destinationTimeText.setText(currentTrain.GetDestinationTime()); 
    } 

    @Override 
    public int getItemCount() { 
     return (mTrains != null ? mTrains.size() : 0); 
    } 

    class CustomViewHolder extends RecyclerView.ViewHolder { 
     TextView platformText; 
     TextView arrivalTimeText; 
     TextView statusText; 
     TextView destinationText; 
     TextView destinationTimeText; 

     public CustomViewHolder(View itemView) { 
      super(itemView); 

      platformText = 
        (TextView)itemView.findViewById(R.id.train_item_platform_text); 
      arrivalTimeText = 
        (TextView)itemView.findViewById(R.id.train_item_arrival_time_text); 
      statusText = 
        (TextView)itemView.findViewById(R.id.train_item_status_text); 
      destinationText = 
        (TextView)itemView.findViewById(R.id.train_item_destination_text); 
      destinationTimeText = 
        (TextView)itemView.findViewById(R.id.train_item_destination_time_text); 
     } 
    } 
} 
+0

android.content.res.Resources$NotFoundException: String resource ID #0x1

변화 viewHolder.arrivalTimeText.setText(currentTrain.GetArrivalTime()); 라인을 가지고 왜 은입니다. 상당히 길었 기 때문에 처음 몇 라인만으로도 세부적인 정보를 얻을 수 있었고 대량의 에러 코드로 넘쳐나기를 바랬습니다. – Gnemlock

답변

6

먼저 읽기 문서.

도착 시간은 int과 텍스트 뷰는 처음의 setText 방법 의 두 가지 유형이 TextView.setText(String text);입니다 그리고 당신은 당신이 방법의 두 번째 유형의 호출 viewHolder.arrivalTimeText.setText(currentTrain.GetArrivalTime());을 쓸 때 두 번째는 TextView.setText(int resource);

입니다. 그 경우 당신은 4 가지 값을 가지고 있습니다 1,2,3,4

은 현재로서는 viewHolder.arrivalTimeText.setText(1);과 같습니다.java는 값 "1"의 자원을 가질 수 없습니다. 당신은 내가 도움이된다면, 전체 오류 코드를 제공하기 위해 기쁘게 생각합니다

viewHolder.arrivalTimeText.setText(String.valueOf(currentTrain.GetArrivalTime())); 
+0

당신은 완전한 전설입니다. 나는 더 잘 알았어야했는데, 나는이 경우 int를 사용해야 할지를 결정하면서 잠깐 들렸지 만, 그것을 다른 인덱스로 해석 할 생각은 결코하지 못했습니다. 도착 시간 부분을 주석 처리했으며 100 % 작동합니다. 고마워요. – Gnemlock

+0

정말 고마워요! 나는 너를 마침내 찾았다. Upvoted <3 –

관련 문제