-1

この行でヌルポインタ例外が発生する理由を確認してください。

cl = Class.forName(myClass);

コードは次のとおりです。

private void addBookmark(String[] values_array) {       
    LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = vi.inflate(R.layout.single_bookmark, null);

    TextView text = (TextView) v.findViewById(R.id.bookmark_text);
    Button button = (Button) v.findViewById(R.id.bookmark_button);

    text.setText(values_array[1]);

    final String myClass = values_array[0];
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Class<?> cl = null;
            try {
            cl = Class.forName(myClass); // <--- this is where i am getting a null pointer exception
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
        }
            Intent myIntent = new Intent(mContext, cl);
            startActivity(myIntent);
        }
    });

どうすればそれを修正できますか? または、交換する必要があるものはありますか?

4

3 に答える 3

0

コメントを回答として投稿し、OPからクリアするように要求されました>

意味的に異なる種類のデータを一緒に保持するために単一を使用するべきではありません!String[]

最初の要素はclassnameで、2 番目の要素はラベルセマンティックです。単一の配列は読み取り可能で、構造化されておらず、通常は保守できません!

(ここでclassNAmeのnullをチェックする条件も追加しました... classNameをnullにすることは致命的なエラーだと思います。)

private void addBookmark(String labelText, String className) {      
      //check className not to be null
      if(className==null) {
          //handle error somehow, log error, etc
          ...
          //no point in doing anything the listener, it would not do any good, just return
          return;
      }

    LayoutInflater vi = (LayoutInflater) getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View v = vi.inflate(R.layout.single_bookmark, null);

    TextView text = (TextView) v.findViewById(R.id.bookmark_text);
    Button button = (Button) v.findViewById(R.id.bookmark_button);

    text.setText(labelValue); // variable "labelValue"

    final String myClass = className; //variable className
      //checking for null

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Class<?> cl = null;
            try {
            cl = Class.forName(myClass); 
              } catch (ClassNotFoundException e) {
                e.printStackTrace();
                //this case should be handled better.
            }
            Intent myIntent = new Intent(mContext, cl);
            startActivity(myIntent);
        }
    });

もちろん、このメソッドを呼び出すときは、次のコードも変更する必要があります。

addBookmark(anArrayOfStrings);

addBookmark(myLabelValueString, myClassNameString);

myLabelValueString、myClassNameString は、それぞれの値を含む String 変数です。

于 2013-09-12T09:04:14.867 に答える