Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 书签活动中的NullPointException错误_Android_Android Intent_Android Activity_Sharedpreferences - Fatal编程技术网

Android 书签活动中的NullPointException错误

Android 书签活动中的NullPointException错误,android,android-intent,android-activity,sharedpreferences,Android,Android Intent,Android Activity,Sharedpreferences,当我执行我的应用程序时,我遇到了这个错误。其目的是向列表中添加活动,并通过按下列表中的按钮来访问该活动 我从教程中获取了代码,活动代码中没有错误。我可以将我的活动添加到“收藏夹”中,该活动列在另一个活动中。但当我试图通过按钮输入该活动时,它会抛出NullPointException错误 以下是活动的代码: public class BookmarksActivity extends Activity { private TextView mEmptyText; private LinearLa

当我执行我的应用程序时,我遇到了这个错误。其目的是向列表中添加活动,并通过按下列表中的按钮来访问该活动

我从教程中获取了代码,活动代码中没有错误。我可以将我的活动添加到“收藏夹”中,该活动列在另一个活动中。但当我试图通过按钮输入该活动时,它会抛出NullPointException错误

以下是活动的代码:

public class BookmarksActivity extends Activity {

private TextView mEmptyText;
private LinearLayout mBookmarkLayout;

private Context mContext;

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bookmarks);

    mContext = getApplicationContext();

    mEmptyText = (TextView) findViewById(R.id.empty_textview);
    mBookmarkLayout = (LinearLayout) findViewById(R.id.bookmark_insert_point);

    getAllKeys();
}

private void getAllKeys()
{
    SharedPreferences sp = this.getSharedPreferences("bookmarks", MODE_PRIVATE);
    Map<String,?> keys = sp.getAll();

    int count = 0;
    for(Map.Entry<String,?> entry : keys.entrySet())
    {
        String value = entry.getValue().toString();
        System.out.println("!!!!!!!!!!!!!!!!!value = "+value);
        String delimiter = ",";
        String[] values_array = value.split(delimiter);
        addBookmark(values_array);
        count++; //keep track of the number of bookmarks
    }

    //if there are no bookmarks, display a text view saying so.  Otherwise, make the text view go away
    if (count == 0)
    {
        mEmptyText.setVisibility(View.VISIBLE);
        mEmptyText.setText(getString(R.string.no_bookmarks));
    }
    else
        mEmptyText.setVisibility(View.GONE);

}

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);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            Intent myIntent = new Intent(mContext, cl);
            startActivity(myIntent);
        }
    });

    // insert into main view
    mBookmarkLayout.addView(v, 0, new      LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT,  LinearLayout.LayoutParams.FILL_PARENT));
    System.out.println("!!!!!!!!!!!!!!!!!!!!Just added a view");
}
}
公共类书签活动扩展活动{
私有文本视图mEmptyText;
私人线路布局图;
私有上下文;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.bookmarks);
mContext=getApplicationContext();
mEmptyText=(TextView)findViewById(R.id.empty\u TextView);
mBookmarkLayout=(LinearLayout)findViewById(R.id.bookmark\u insert\u point);
getAllKeys();
}
私有void getAllKeys()
{
SharedReferences sp=this.getSharedReferences(“书签”,MODE\u PRIVATE);
映射键=sp.getAll();
整数计数=0;
for(Map.Entry:keys.entrySet())
{
字符串值=entry.getValue().toString();
System.out.println(“!!!!!!!!!!!!!!!!!!!!!!!value=“+value”);
字符串分隔符=“,”;
String[]values\u array=value.split(分隔符);
addBookmark(值\数组);
count++;//记录书签的数量
}
//如果没有书签,则显示一个文本视图,说明是这样的。否则,使文本视图消失
如果(计数=0)
{
mEmptyText.setVisibility(View.VISIBLE);
setText(getString(R.string.no_bookmarks));
}
其他的
mEmptyText.setVisibility(View.GONE);
}
私有void addBookmark(字符串[]值\u数组)
{       
LayoutInflater vi=(LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
视图v=vi.充气(R.布局.单书签,空);
TextView text=(TextView)v.findViewById(R.id.bookmark\u text);
按钮按钮=(按钮)v.findViewById(R.id.bookmark_按钮);
setText(值_数组[1]);
最后一个字符串myClass=values_数组[0];
setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
类别cl=空;
试一试{
cl=类别。forName(myClass);
}catch(classnotfounde异常){
e、 printStackTrace();
}
意向myIntent=新意向(mContext,cl);
星触觉(myIntent);
}
});
//插入主视图
mBookmarkLayout.addView(v,0,新的LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_父项,LinearLayout.LayoutParams.FILL_父项));
System.out.println(“!!!!!!!!!!!!!!!刚刚添加了一个视图”);
}
}
我在以下位置得到错误:Intent myIntent=newintent(mContext,cl)

也许myClass是空的,但我不知道该怎么办

谢谢

编辑:添加LogCat

09-23 20:04:53.367: E/AndroidRuntime(629): FATAL EXCEPTION: main
09-23 20:04:53.367: E/AndroidRuntime(629): java.lang.NullPointerException
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.content.ComponentName.<init>(ComponentName.java:76)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.content.Intent.<init>(Intent.java:3301)
09-23 20:04:53.367: E/AndroidRuntime(629):  at com.and.mememe.FavouritesActivity$1.onClick(FavouritesActivity.java:101)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.view.View.performClick(View.java:4084)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.view.View$PerformClick.run(View.java:16966)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.os.Handler.handleCallback(Handler.java:615)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.os.Handler.dispatchMessage(Handler.java:92)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.os.Looper.loop(Looper.java:137)
09-23 20:04:53.367: E/AndroidRuntime(629):  at android.app.ActivityThread.main(ActivityThread.java:4745)
09-23 20:04:53.367: E/AndroidRuntime(629):  at java.lang.reflect.Method.invokeNative(Native Method)
09-23 20:04:53.367: E/AndroidRuntime(629):  at java.lang.reflect.Method.invoke(Method.java:511)
09-23 20:04:53.367: E/AndroidRuntime(629):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-23 20:04:53.367: E/AndroidRuntime(629):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-23 20:04:53.367: E/AndroidRuntime(629):  at dalvik.system.NativeStart.main(Native Method)
09-23 20:04:53.367:E/AndroidRuntime(629):致命异常:main
09-23 20:04:53.367:E/AndroidRuntime(629):java.lang.NullPointerException
09-23 20:04:53.367:E/AndroidRuntime(629):在android.content.ComponentName.(ComponentName.java:76)
09-23 20:04:53.367:E/AndroidRuntime(629):在android.content.Intent.(Intent.java:3301)
09-23 20:04:53.367:E/AndroidRuntime(629):在com.and.mememe.favoriteSactivity$1.onClick(favoriteSactivity.java:101)
09-23 20:04:53.367:E/AndroidRuntime(629):在android.view.view.performClick(view.java:4084)上
09-23 20:04:53.367:E/AndroidRuntime(629):在android.view.view$PerformClick.run(view.java:16966)
09-23 20:04:53.367:E/AndroidRuntime(629):在android.os.Handler.handleCallback(Handler.java:615)上
09-23 20:04:53.367:E/AndroidRuntime(629):在android.os.Handler.dispatchMessage(Handler.java:92)上
09-23 20:04:53.367:E/AndroidRuntime(629):在android.os.Looper.loop(Looper.java:137)
09-23 20:04:53.367:E/AndroidRuntime(629):位于android.app.ActivityThread.main(ActivityThread.java:4745)
09-23 20:04:53.367:E/AndroidRuntime(629):位于java.lang.reflect.Method.Invokenactive(本机方法)
09-23 20:04:53.367:E/AndroidRuntime(629):位于java.lang.reflect.Method.invoke(Method.java:511)
09-23 20:04:53.367:E/AndroidRuntime(629):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
09-23 20:04:53.367:E/AndroidRuntime(629):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
09-23 20:04:53.367:E/AndroidRuntime(629):在dalvik.system.NativeStart.main(本机方法)
编辑2

button.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            Class<?> cl = null;
            try {
                cl = Class.forName(myClass);
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
            Intent myIntent = new Intent(mContext, cl);
            startActivity(myIntent);
        }
    });
button.setOnClickListener(新视图.OnClickListener()
{
@凌驾
公共void onClick(视图v)
{
类别cl=空;
试一试{
cl=类别。forName(myClass);
}catch(classnotfounde异常){
e、 printStackTrace();
}
意向myIntent=新意向(mContext,cl);
星触觉(myIntent);
}
});

这里的问题归根结底是,
myClass
没有返回有效的类名。因此,实际上没有
活动

这个代码在这里

try {
            cl = Class.forName(myClass);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
正在捕获一个
ClassNotFoundException
,但代码继续尝试并启动无效的
活动。要解决此问题,请将
Intent
代码放入
try
块中。这样,当它捕获到异常时,就可以对其进行一些处理,如记录日志、打印消息等。。。但是,最重要的是,它不会尝试启动无效的活动。需要检查
myClass
变量的有效性。它的路径错误或拼写错误

try {
        cl = Class.forName(myClass);
        Intent myIntent = new Intent(mContext, cl);
        startActivity(myIntent);
     } catch (ClassNotFoundException e) {
        e.printStackTrace();
     }

首先,你没有得到一个
NPE
那里…发布你的完整日志。其次,您不需要
应用程序上下文
在那里,
Activit