GVKun编程网logo

使用CustomListAdapter时发生NullPointerException(addeventlistener of null)

12

最近很多小伙伴都在问使用CustomListAdapter时发生NullPointerException和addeventlistenerofnull这两个问题,那么本篇文章就来给大家详细解答一下,同

最近很多小伙伴都在问使用CustomListAdapter时发生NullPointerExceptionaddeventlistener of null这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展android studio NullPointerException at addDrawerListener 方法、android – 为什么使用标准BillingService会发生NullPointerException?、android – 自定义SimpleCursorAdapter,数据库查询和NullPointerException、Android中的Spinner和ArrayAdapter NullPointerException等相关知识,下面开始了哦!

本文目录一览:

使用CustomListAdapter时发生NullPointerException(addeventlistener of null)

使用CustomListAdapter时发生NullPointerException(addeventlistener of null)

我在Android
Appiclation中创建CustomListAdapter。但是我NullPointerException在执行它时得到这个错误。

这是我的CustomListAdapter.java代码:

/**
 * 
 */
package com.fanjavaid.searchhttprequest.adapter;

import java.util.List;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.fanjavaid.searchhttprequest.R;
import com.fanjavaid.searchhttprequest.app.AppController;
import com.fanjavaid.searchhttprequest.model.Menu;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

/**
 * @author fanjavaid
 *
 */
public class CustomListAdapter extends BaseAdapter {

    private Activity activity;

    private LayoutInflater inflater;

    private List<Menu> menuItems;

    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    public CustomListAdapter(Activity activity,List<Menu> menuItems) {
        this.activity = activity;
        this.menuItems = menuItems;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return menuItems.size();
    }

    @Override
    public Object getItem(int location) {
        // TODO Auto-generated method stub
        return menuItems.get(location);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        if (inflater == null)
            inflater = (LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (convertView == null) 
            convertView = inflater.inflate(R.layout.list_row,null);

        if (imageLoader == null)
            imageLoader = AppController.getInstance().getImageLoader();
            NetworkImageView thumbNail = (NetworkImageView) convertView.findViewById(R.id.thumbnail);
            TextView menuTitle = (TextView) convertView.findViewById(R.id.menuTitle);
            TextView inputDate = (TextView) convertView.findViewById(R.id.postDate);

        // Getting movie data for the row
        Menu m = menuItems.get(position);

        // thumbnail image
        thumbNail.setImageUrl(m.getThumbnailUrl(),imageLoader);

        // title
        menuTitle.setText(m.getMenuTitle());

        // input date
        inputDate.setText("Post Date : " + String.valueOf(m.getInputDate().toString()));

        return convertView;
    }

}

这是我的活动代码:

package com.fanjavaid.searchhttprequest;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.fanjavaid.searchhttprequest.adapter.CustomListAdapter;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ListView;

public class ListMenuActivity extends Activity {

    // Log tag
    private static final String TAG = ListMenuActivity.class.getSimpleName();

    // Movie JSON Url
    private List<com.fanjavaid.searchhttprequest.model.Menu> menuList = new ArrayList<com.fanjavaid.searchhttprequest.model.Menu>();
    private ListView listView;
    private CustomListAdapter adapter;

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

        listView = (ListView) findViewById(R.id.list);
        adapter = new CustomListAdapter(this,menuList);
        listView.setAdapter(adapter);

        Intent intent = getIntent();

        //String jsonData = intent.getStringExtra("json_menu");

        Bundle bundle = intent.getExtras();
        String jsonString = bundle.getString("json_menu");

        try {
            JSONObject objectJson = new JSONObject(jsonString);
            JSONArray arrayJson = objectJson.getJSONArray("results");

            for (int i = 0; i < arrayJson.length(); i++) {

                JSONObject obj = arrayJson.getJSONObject(i);

                com.fanjavaid.searchhttprequest.model.Menu menu = new com.fanjavaid.searchhttprequest.model.Menu();
                menu.setMenuTitle(obj.getString("nama_menu"));
                menu.setThumbnailUrl("http://tempercube/receip_finder/" + obj.getString("gambar"));

                String dateInString = obj.getString("tgl_input");
                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
                Date parsedDate = formatter.parse(dateInString);
                menu.setInputDate(parsedDate);

                // add to list
                menuList.add(menu);
            }

            // notifying list adapter about data changed
            // so that it renders the list view with data changed
            adapter.notifyDataSetChanged();
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.list_menu,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button,so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

在我的活动中,已经在setAdapter()方法之前添加了CustomListAdapter实例化。但是我仍然得到那个NullPointerException错误。

这是我的错误日志

09-18 09:11:34.661: E/AndroidRuntime(24097): FATAL EXCEPTION: main
09-18 09:11:34.661: E/AndroidRuntime(24097): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fanjavaid.searchhttprequest/com.fanjavaid.searchhttprequest.ListMenuActivity}: java.lang.NullPointerException
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2261)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2311)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread.access$600(ActivityThread.java:149)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1293)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.os.Handler.dispatchMessage(Handler.java:99)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.os.Looper.loop(Looper.java:137)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread.main(ActivityThread.java:5214)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at java.lang.reflect.Method.invokeNative(Native Method)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at java.lang.reflect.Method.invoke(Method.java:525)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at dalvik.system.NativeStart.main(Native Method)
09-18 09:11:34.661: E/AndroidRuntime(24097): Caused by: java.lang.NullPointerException
09-18 09:11:34.661: E/AndroidRuntime(24097):    at com.fanjavaid.searchhttprequest.adapter.CustomListAdapter.<init>(CustomListAdapter.java:34)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at com.fanjavaid.searchhttprequest.ListMenuActivity.onCreate(ListMenuActivity.java:38)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.Activity.performCreate(Activity.java:5133)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
09-18 09:11:34.661: E/AndroidRuntime(24097):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2225)
09-18 09:11:34.661: E/AndroidRuntime(24097):    ... 11 more

这是我的AppController.java

/**
 * 
 */
package com.fanjavaid.searchhttprequest.app;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.Volley;
import com.fanjavaid.searchhttprequest.util.LruBitmapCache;

import android.app.Application;
import android.text.TextUtils;

/**
 * @author fanjavaid
 *
 */
public class AppController extends Application {
    public static final String TAG = AppController.class.getSimpleName();

    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;

    private static AppController mInstance;

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }

    public static synchronized AppController getInstance() {
        return mInstance;
    }

    public RequestQueue getRequestQueue() {
        if (mRequestQueue == null) {
            mRequestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        return mRequestQueue;
    }

    public ImageLoader getImageLoader() {
        getRequestQueue();
        if (mImageLoader == null) {
            mImageLoader = new ImageLoader(this.mRequestQueue,new LruBitmapCache());
        }
        return this.mImageLoader;
    }

    public <T> void addToRequestQueue(Request<T> req,String tag) {
        // set the default tag if tag is empty
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(Request<T> req) {
        req.setTag(TAG);
        getRequestQueue().add(req);
    }

    public void cancelPendingRequests(Object tag) {
        if (mRequestQueue != null) {
            mRequestQueue.cancelAll(tag);
        }
    }
}

这是我的MainActivity.java

package com.fanjavaid.searchhttprequest;

import java.util.LinkedList;
import java.util.List;

import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONObject;

import com.android.volley.Request.Method;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.VolleyLog;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.JsonObjectRequest;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;


public class MainActivity extends Activity {

    private TextView responseText;
    private EditText searchText;
    private String url;

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

        responseText = (TextView) findViewById(R.id.textView1);
        searchText = (EditText) findViewById(R.id.searchBox);

        url = "http://tempercube.com/receip_finder/process_cari.php";
    }

    private String addLocationToUrl(String url,String parameter) {
        if (!url.endsWith("?"))
            url += "?";

        List<BasicNameValuePair> params = new LinkedList<BasicNameValuePair>();
        params.add(new BasicNameValuePair("bahan",parameter));

        String paramString = URLEncodedUtils.format(params,"utf-8");
        url += paramString;

        return url;
    }

    public void doRequest(String passUrl) {
        final ProgressDialog pDialog = new ProgressDialog(this);
        pDialog.setMessage("Loading...");
        pDialog.show();

        JsonObjectRequest jsonObjRequest = new JsonObjectRequest(Method.GET,passUrl,null,new Response.Listener<JSONObject>() {

                    @Override
                    public void onResponse(JSONObject response) {
                        // TODO Auto-generated method stub
                        Log.d("TAG",response.toString());
                        responseText.setText(response.toString());

                        Intent intent = new Intent("com.fanjavaid.searchhttprequest.ListMenuActivity");

                        Bundle extras = new Bundle();
                        extras.putString("json_menu",response.toString());

                        intent.putExtras(extras);

                        startActivity(intent);

                        pDialog.hide();
                    }

                },new Response.ErrorListener() {

                    @Override
                    public void onErrorResponse(VolleyError error) {
                        // TODO Auto-generated method stub
                        Log.d("ERROR","Error : " + error.getMessage());
                        pDialog.hide();
                    }

                });

        // Make request queue
        VolleySingleton.getInstance(getApplicationContext()).addToRequestQueue(jsonObjRequest);

    }

    public void searchMenu(View view) {
        if(view.getId() == R.id.button1){
            String paramSearch = searchText.getText().toString();
            url = addLocationToUrl(url,paramSearch);

            Log.d("URL_INFO",url);

            doRequest(url);

            // reset URL
            url = "http://tempercube.com/receip_finder/process_cari.php";
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main,so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

最后是我的list_activity.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView 
        android:id="@+id/list" 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"
        android:listSelector="@drawable/list_row_selector">
    </ListView>

</RelativeLayout>

请帮忙。非常感谢你。

android studio NullPointerException at addDrawerListener 方法

android studio NullPointerException at addDrawerListener 方法

如何解决android studio NullPointerException at addDrawerListener 方法?

我正在尝试构建一个包含少量项目的导航抽屉。但它让我在下面的代码中的 addDrawerListener 方法出错:

public class MainActivity extends AppCompatActivity {
    private DrawerLayout drawer;

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

        Toolbar toolbar = findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
    }

    @Override
    public void onBackpressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else{
            super.onBackpressed();
        }
    }
}

这里是 AndroidManifest.xml :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity android:name=".MainActivity"
            android:theme="@style/Theme.MyApplication.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

这是菜单 ( drawer_menu.xml ),它似乎工作正常

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:showIn = "navigation_view">

    <group android:checkableBehavior="single">

        <item android:id="@+id/nav_people"
            android:icon="@drawable/ic_people"
            android:title="@string/people" />
        <item android:id="@+id/nav_goods"
            android:icon="@drawable/ic_goods"
            android:title="@string/goods" />
        <item android:id="@+id/nav_delivery"
            android:icon="@drawable/ic_delivery"
            android:title="@string/delivery" />
        <item android:id="@+id/nav_saloon"
            android:icon="@drawable/ic_saloon"
            android:title="@string/saloon" />
        <item android:id="@+id/nav_setting"
            android:icon="@drawable/ic_setting"
            android:title="@string/setting" />
        <item android:id="@+id/nav_help"
            android:icon="@drawable/ic_help"
            android:title="@string/help" />
        <item android:id="@+id/nav_update"
            android:icon="@drawable/ic_update"
            android:title="@string/update" />
        <item android:id="@+id/nav_about_us"
            android:icon="@drawable/ic_about_us"
            android:title="@string/about_us" />
        <item android:id="@+id/nav_quit"
            android:icon="@drawable/ic_exit"
            android:title="@string/exit" />

    </group>
</menu>

还有一个标题( nav_header.xml ),其中包含一张小图片和两个文本视图

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/nav_header"
    android:gravity="bottom"
    android:orientation="vertical"
    android:padding="16dp"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@mipmap/ic_launcher_round" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="8dp"
        android:text="@string/strong_text"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/weak_text" />

</LinearLayout>

这里是 themes.xml 文件。我试图遵循的教程有点过时,并且有styles.xml 文件而不是themes.xml 但我不确定。我复制粘贴 <style name="Theme.MyApplication.NoActionBar">

中的 themes.xml (night) 部分
<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
        <!-- Status bar color. -->
        <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
        <!-- Customize your theme here. -->
    </style>

    <style name="Theme.MyApplication.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

</resources>

解决方法

drawer 使用前需要初始化。

drawer = findViewById(R.id.drawer) 

(注意:在 param 中,您需要像 Toolbar 一样从 xml 传递 DrawerLayout 的 id)。

这应该在你使用 drawer 之前,在你的案例下面的行之前。

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this,drawer,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
,

您必须像使用工具栏一样绑定 drawerLayout id。

在使用“抽屉”对象之前,只需在 XML 中绑定抽屉的 id。

,

在查找工具栏 id 下添加以下行 -

int

android – 为什么使用标准BillingService会发生NullPointerException?

android – 为什么使用标准BillingService会发生NullPointerException?

我在我的应用程序中使用标准BillingService(即从sample application复制而不做更改).
但有时我的应用程序崩溃与logcat中的以下数据:

04-16 10:05:43.556: INFO/ActivityManager(96): Start proc tv.kinobaza.app for service tv.kinobaza.app/tv.kinobaza.billing.BillingService: pid=28748 uid=10081 gids={3003}
04-16 10:05:43.646: DEBUG/AndroidRuntime(28748): Shutting down VM
04-16 10:05:43.656: WARN/dalvikvm(28748): threadid=1: thread exiting with uncaught exception (group=0x400259f8)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): FATAL EXCEPTION: main
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): java.lang.RuntimeException: Unable to start service tv.kinobaza.billing.BillingService@4632f578 with null: java.lang.NullPointerException
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3282)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.ActivityThread.access$3600(ActivityThread.java:135)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2211)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.os.Handler.dispatchMessage(Handler.java:99)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.os.Looper.loop(Looper.java:144)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.ActivityThread.main(ActivityThread.java:4937)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at java.lang.reflect.Method.invokeNative(Native Method)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at java.lang.reflect.Method.invoke(Method.java:521)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at dalvik.system.NativeStart.main(Native Method)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748): Caused by: java.lang.NullPointerException
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at tv.kinobaza.billing.BillingService.onStart(UnkNown Source)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.Service.onStartCommand(Service.java:420)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3267)
04-16 10:05:43.656: ERROR/AndroidRuntime(28748):     ... 10 more
04-16 10:05:43.736: DEBUG/SurfaceFlinger(96): Layer::setBuffers(this=0xb947a8),pid=96,w=1,h=1
04-16 10:05:43.736: DEBUG/SurfaceFlinger(96): Layer::setBuffers(this=0xb947a8),h=1
04-16 10:05:43.766: DEBUG/SurfaceFlinger(96): Layer::requestBuffer(this=0xb947a8),index=0,w=480,h=418 success
04-16 10:05:43.986: DEBUG/dalvikvm(28721): GC_FOR_MALLOC freed 9604 objects / 1369120 bytes in 102ms

这是相关的代码:

/**
 * We don't support binding to this service,only starting the service.
 */
@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onStart(Intent intent,int startId) {
    handleCommand(intent,startId);
}

这有什么不对?

我注意到了 – 当设备在夜间睡觉时,一旦我开始使用它,它会在约5分钟内崩溃.

并且,以下是更多详细信息:BillingService从我的应用程序的“首选项”屏幕开始.这里是Preferences类的代码:

@Override
protected void onDestroy() {
mBillingService.unbind();
    super.onDestroy();
}

UPD.也许,我应该在Main活动中启动此服务/解除绑定?

这是我的proguard.cfg:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.broadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep class com.android.vending.billing.**

-keepclasseswithmembernames class * {
    native java.lang.String);
}

-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

-libraryjars /lib/libGoogleAnalytics.jar
-libraryjars /lib/signpost-commonshttp4-1.2.1.1.jar
-libraryjars /lib/signpost-core-1.2.1.1.jar
-dontwarn org.apache.commons.codec.binary.Base64
最佳答案
所以你在proguard之后得到这个NPE而不是事先.

你必须混淆一些你不应该喜欢扩展应用程序/活动/服务的类

你不应该混淆这些类:

http://proguard.sourceforge.net/index.html#/manual/examples.html(转到例7)

android – 自定义SimpleCursorAdapter,数据库查询和NullPointerException

android – 自定义SimpleCursorAdapter,数据库查询和NullPointerException

我正在尝试从数据库中填充ListView,并使用花哨的删除按钮调整每一行.所以我创建了列表Activity和自定义SimpleCursorAdapter.

这是主要的ListView活动:

public class EditEntries extends ListActivity {
    Cursor cursor;
    DBAdapter db = new DBAdapter(this);
    private static String[] FROM = { _ID,score_COLUMN,"date(time,''localtime'')",};
    private static int[] TO = { R.id.rowid,R.id.title,R.id.time,};

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.entries_list);
        try {
            cursor = getEvents();
            showEvents(cursor);
        } finally {
            db.close();
        }
    }

    private void showEvents(Cursor cursor) {
        // Set up data binding
        SMSimpleCursorAdapter adapter = new SMSimpleCursorAdapter(this,R.layout.entries_list_item,cursor,FROM,TO);
        setlistadapter(adapter);

    }

    private Cursor getEvents() {
        db.open();
        cursor = db.getAllscores();
        startManagingCursor(cursor);
        return cursor;
    }

    void delRow() {        // this is method for deleting row by _id
        db.open();
        db.deletescore(3); // here will be TAG with _id from adapter,db.close();        // for Now I just use hardcoded _id
    }

}

这是自定义的SimpleCursorAdapter:

public class SMSimpleCursorAdapter extends SimpleCursorAdapter{

    Cursor c;
    Context context;
    Activity activity;

    public SMSimpleCursorAdapter(Context context,int layout,Cursor c,String[] from,int[] to) {
        super(context,layout,c,from,to);

        this.c = c;
        this.context=context;
        this.activity=(Activity) context;

    }
    EditEntries dbDel = new EditEntries(); //from prevIoUs code sample

    @Override
    public View getView(int position,View convertView,ViewGroup parent) {
        if(convertView == null)
            convertView = View.inflate(context,null);
        View row = convertView;

        c.movetoPosition(position);

        TextView score = (TextView) convertView.findViewById(R.id.title);
        TextView time = (TextView) convertView.findViewById(R.id.time);
        TextView id = (TextView) convertView.findViewById(R.id.rowid);

        id.setText(c.getString(0));
        time.setText(c.getString(2));
        score.setText(c.getString(1));

        String daTag = c.getString(1);

        ImageButton delButton = (ImageButton) convertView.findViewById(R.id.delButton);
        delButton.setFocusable(true);
        delButton.setClickable(true);
        //delButton.setTag(daTag);
        delButton.setonClickListener(new OnClickListener() { //Click listener fro delete button
             @Override
             public void onClick(View view) {
                 dbDel.delRow(); //this is "delete row" method from previos code                    sample
             }
             });

        return(row);
    }

}

当我点击删除按钮时,所有这些东西都给了我NullPointerException.
我是android的新手,并且假设我错过了一些明显的东西.

logcat的:

ERROR/AndroidRuntime(14027): FATAL EXCEPTION: main

ERROR/AndroidRuntime(14027): java.lang.NullPointerException

ERROR/AndroidRuntime(14027): at android.content.Contextwrapper.openorCreateDatabase(Contextwrapper.java:203)

ERROR/AndroidRuntime(14027): at android.database.sqlite.sqliteOpenHelper.getWritableDatabase(sqliteOpenHelper.java:98)

ERROR/AndroidRuntime(14027): at namespace.DBAdapter.open(DBAdapter.java:66)

ERROR/AndroidRuntime(14027): at namespace.EditEntries.delRow(EditEntries.java:50)

ERROR/AndroidRuntime(14027): at namespace.SMSimpleCursorAdapter$1.onClick(SMSimpleCursorAdapter.java:64)

ERROR/AndroidRuntime(14027): at android.view.View.performClick(View.java:2414)

ERROR/AndroidRuntime(14027): at android.view.View$PerformClick.run(View.java:8838)

ERROR/AndroidRuntime(14027): at android.os.Handler.handleCallback(Handler.java:587)

ERROR/AndroidRuntime(14027): at android.os.Handler.dispatchMessage(Handler.java:92)

ERROR/AndroidRuntime(14027): at android.os.Looper.loop(Looper.java:123)

ERROR/AndroidRuntime(14027): at android.app.ActivityThread.main(ActivityThread.java:4680)

ERROR/AndroidRuntime(14027): at java.lang.reflect.Method.invokeNative(Native Method)

ERROR/AndroidRuntime(14027): at java.lang.reflect.Method.invoke(Method.java:521)

ERROR/AndroidRuntime(14027): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)

ERROR/AndroidRuntime(14027): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

ERROR/AndroidRuntime(14027): at dalvik.system.NativeStart.main(Native Method)

解决方法

问题出在您的SMSimpleCursorAdapter代码中:

EditEntries dbDel = new EditEntries(); //from prevIoUs code sample

您创建一个新对象但它不是托管活动(例如,不会调用onCreate方法).当您尝试第二次(从您的适配器)创建它时,NPE可能来自您的DBAdapter.

快速解决:

EditEntries dbDel; //from prevIoUs code sample
public SMSimpleCursorAdapter(Context context,int[] to) {
    super(context,to);

    this.c = c;
    this.context = context;
    this.activity = (Activity) context;
    this.dbDel = (EditEntries) context;
}

如果您不想只是快速修复,以下将是一个更好的解决方案:

>将delRow,getEvents方法移动到DBAdapter类中>修改SMSimpleCursorAdapter的构造函数以提供DBAdapter类(在ListActivity中创建).

Android中的Spinner和ArrayAdapter NullPointerException

Android中的Spinner和ArrayAdapter NullPointerException

我不知道为什么我得到一个NullPointerException,但它发生在spinner.setAdapter(arrayAdapter)行.任何人都可以看看我的代码,看看问题是什么以及如何解决它.提前致谢.

这是我的代码:

public class SlidingTabsActivity extends SherlockFragmentActivity
{

ViewPager viewPager;
TabsAdapter tabsAdapter;
ActionBar actionBarTabs;
Spinner spinner;
ArrayAdapter<String> arrayAdapter;

PopupFirmware popupFirmware; // Popup firmware class instance

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);

    viewPager = new ViewPager(this);
    viewPager.setId(R.id.pager);
    setContentView(viewPager);

    arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,R.array.device_description);
    spinner = (Spinner) findViewById(R.id.tabsspinner);
    spinner.setAdapter(arrayAdapter);

    actionBarTabs = getSupportActionBar();
    actionBarTabs.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionBarTabs.setCustomView(spinner);
    actionBarTabs.setdisplayShowCustomEnabled(true);
    actionBarTabs.setdisplayHomeAsUpEnabled(true);

    tabsAdapter = new TabsAdapter(this,viewPager); // Declares the tabs adapter class with the view pager view

    popupFirmware = new PopupFirmware(this); // Declaring popup firmware class

    /* Adds fragments to the tabs adapter */
    tabsAdapter.addTab(actionBarTabs.newTab().setText("PV"),Fragment_1.class,null);
    tabsAdapter.addTab(actionBarTabs.newTab().setText("CONfig"),Fragment_2.class,null);
    tabsAdapter.addTab(actionBarTabs.newTab().setText("DIAG"),Fragment_3.class,null);

}

这是logcat:

11-20 13:16:26.259: E/AndroidRuntime(11789): FATAL EXCEPTION: main
11-20 13:16:26.259: E/AndroidRuntime(11789): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.mobileapplicationretry/com.example.mobileapplicationretry.SlidingTabsActivity}: java.lang.NullPointerException
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2211)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread.access$600(ActivityThread.java:141)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.os.Looper.loop(Looper.java:137)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread.main(ActivityThread.java:5103)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at java.lang.reflect.Method.invokeNative(Native Method)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at java.lang.reflect.Method.invoke(Method.java:525)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at dalvik.system.NativeStart.main(Native Method)
11-20 13:16:26.259: E/AndroidRuntime(11789): Caused by: java.lang.NullPointerException
11-20 13:16:26.259: E/AndroidRuntime(11789):    at com.example.mobileapplicationretry.SlidingTabsActivity.onCreate(SlidingTabsActivity.java:51)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.Activity.performCreate(Activity.java:5133)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-20 13:16:26.259: E/AndroidRuntime(11789):    at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:2175)
11-20 13:16:26.259: E/AndroidRuntime(11789):    ... 11 more

解决方法

你的微调器是空的.
看,首先创建ViewPager并创建setContentView:

setContentView(viewPager);

但是你的ViewPager是空的,因为你没有放任何东西.接下来你打电话:

spinner = (Spinner) findViewById(R.id.tabsspinner);

这意味着findViewById将查找您的微调器的起始根视图 – 您之前创建的ViewPager是空的.所以Spinner永远不会被发现 – 它总是空的.

关于使用CustomListAdapter时发生NullPointerExceptionaddeventlistener of null的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于android studio NullPointerException at addDrawerListener 方法、android – 为什么使用标准BillingService会发生NullPointerException?、android – 自定义SimpleCursorAdapter,数据库查询和NullPointerException、Android中的Spinner和ArrayAdapter NullPointerException的相关信息,请在本站寻找。

本文标签: