2016-12-22 10 views
0

私はUserListアクティビティからPieChartActivityを呼び出しています。 PieChartActivityはうまく表示されますが、前のアクティビティ(UserListアクティビティ)が表示されてからアプリがクラッシュします。いずれかのPieChartActivityで背中が押されたときのヌルポインタ例外MPAndroidChartを使用

12-22 12:33:51.996 76-98/? I/ActivityManager: Displayed com.example.naseera.userlogin/.PieChartActivity: +10s654ms 
12-22 12:33:56.581 745-745/? D/AndroidRuntime: Shutting down VM 
12-22 12:33:56.581 745-745/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x40014760) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime: FATAL EXCEPTION: main 
12-22 12:33:56.841 745-745/? E/AndroidRuntime: java.lang.NullPointerException 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.graphics.Canvas.setBitmap(Canvas.java:177) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at com.github.mikephil.charting.renderer.PieChartRenderer.releaseBitmap(PieChartRenderer.java:985) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at com.github.mikephil.charting.charts.PieChart.onDetachedFromWindow(PieChart.java:726) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.View.dispatchDetachedFromWindow(View.java:8197) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1968) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewRoot.dispatchDetachedFromWindow(ViewRoot.java:1887) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewRoot.doDie(ViewRoot.java:3191) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.ViewRoot.die(ViewRoot.java:3159) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.WindowManagerImpl.removeViewImmediate(WindowManagerImpl.java:222) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.view.Window$LocalWindowManager.removeViewImmediate(Window.java:538) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:2912) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.app.ActivityThread.access$2100(ActivityThread.java:122) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1035) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:99) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:132) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:4025) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at java.lang.reflect.Method.invokeNative(Native Method) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Method.java:491) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
12-22 12:33:56.841 745-745/? E/AndroidRuntime:  at dalvik.system.NativeStart.main(Native Method) 
12-22 12:33:56.881 76-76/? W/ActivityManager: Force finishing activity com.example.naseera.userlogin/.Userlist 
12-22 12:33:57.661 76-85/? W/ActivityManager: Activity pause timeout for ActivityRecord{40922448 com.example.naseera.userlogin/.Userlist} 
12-22 12:34:01.601 745-745/? I/Process: Sending signal. PID: 745 SIG: 9 

前のアクティビティが表示されます。これは、logcatがある

package com.example.naseera.userlogin; 
import android.content.Context; 
import android.content.Intent; 

import android.content.res.Resources; 
import android.graphics.Color; 
import android.os.Handler; 
import android.support.v4.content.ContextCompat; 
import android.support.v4.content.res.ResourcesCompat; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.support.v7.widget.Toolbar; 
import android.util.Log; 
import android.util.TypedValue; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.WindowManager; 
import android.widget.Toast; 

import com.github.mikephil.charting.animation.Easing; 
import com.github.mikephil.charting.charts.PieChart; 
import com.github.mikephil.charting.components.Legend; 
import com.github.mikephil.charting.data.Entry; 
import com.github.mikephil.charting.data.PieData; 
import com.github.mikephil.charting.data.PieDataSet; 
import com.github.mikephil.charting.data.PieEntry; 
import com.github.mikephil.charting.highlight.Highlight; 
import com.github.mikephil.charting.listener.OnChartValueSelectedListener; 

import java.util.ArrayList; 



public class PieChartActivity extends AppCompatActivity{ 
    private float[] yData; 
    //private float[] yData2 = {25.0f, 10.0f,66.0f}; 
    private String[] xData = {"Admin", "Standard User","Premium User"}; 
    PieChart pieChart; 
    private DBHelper db; 
    public Toolbar tb; 
    private static String TAG = ".PieChartActivity"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_piechart); 
    tb = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(tb); 

    if (getSupportActionBar() != null){ 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
    } 

    TypedValue typedValue = new TypedValue(); 
    getTheme().resolveAttribute(R.attr.colorPrimaryDark, typedValue, true); 
    int color = typedValue.data; 





    pieChart = (PieChart) findViewById(R.id.idPieChart); 
    // pieChart.setDescription("User Types"); 
    pieChart.setRotationEnabled(true); 
    pieChart.setHoleRadius(30f); 
    pieChart.setTransparentCircleRadius(35f); 
    pieChart.setTransparentCircleAlpha(0); 

    pieChart.setCenterText("Registered Users"); 
    pieChart.setCenterTextSize(20); 
    pieChart.setCenterTextColor(color); 
    pieChart.setDrawEntryLabels(true); 
    pieChart.setEntryLabelTextSize(20); 
    pieChart.setTransparentCircleRadius(61f); 
    pieChart.setNoDataTextColor(Color.RED); 


    addDataSet(); 
    pieChart.setOnChartValueSelectedListener(new OnChartValueSelectedListener() { 
     @Override 
     public void onValueSelected(Entry e, Highlight h) { 

      if (e == null) 
       return; 
      Log.i("VAL SELECTED", 
        "Value: " + e.getY() + ", index: " + h.getX() 
          + ", DataSet index: " + h.getDataSetIndex()); 

      String usertype = xData[Math.round(h.getX())]; 
      System.out.println(usertype); 
      int numberofusers = Math.round(e.getY()); 
      System.out.println(numberofusers); 


      Toast.makeText(PieChartActivity.this, usertype +" = " + numberofusers, Toast.LENGTH_SHORT).show(); 
    ;   } 

     @Override 
     public void onNothingSelected() { 

     } 
    }); 
} 

private void addDataSet() { 

    db = new DBHelper(this); 
    yData = db.getNumberOfUsers(); 
    ArrayList<PieEntry> entries = new ArrayList<>(); 

    entries.add(new PieEntry(Math.round(yData[0]),"Admin")); 
    entries.add(new PieEntry(Math.round(yData[1]),"Standard User")); 
    entries.add(new PieEntry(Math.round(yData[2]), "Premium User")); 


    TypedValue typedValue = new TypedValue(); 
    getTheme().resolveAttribute(R.color.green, typedValue, true); 
    int greencolor = typedValue.data; 


    PieDataSet pieDataSet = new PieDataSet(entries, "Registered Users"); 

    pieDataSet.setSliceSpace(2); 
    pieDataSet.setValueTextSize(20); 
    pieDataSet.setColor(Color.WHITE); 
    pieDataSet.setValueTextColor(Color.WHITE); 

    //add colors to dataset 

    ArrayList<Integer> colors = new ArrayList<>(); 
    colors.add(ContextCompat.getColor(this, R.color.deeporange)); 

    colors.add(ContextCompat.getColor(this, R.color.teal)); 

    colors.add(ContextCompat.getColor(this, R.color.purple)); 
    pieDataSet.setColors(colors); 


    //add legend to chart 

    Legend legend = pieChart.getLegend(); 
    legend.setForm(Legend.LegendForm.CIRCLE); 
    legend.setFormSize(15); 
    legend.setTextSize(15); 
    //legend.setPosition(Legend.LegendPosition.BELOW_CHART_LEFT); 

    Legend l = pieChart.getLegend(); 
    l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP); 
    l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.RIGHT); 
    l.setOrientation(Legend.LegendOrientation.VERTICAL); 
    l.setDrawInside(false); 
    l.setXEntrySpace(7f); 
    l.setYEntrySpace(0f); 
    l.setYOffset(0f); 

    //create pie data object 
    PieData pieData = new PieData(pieDataSet); 
    pieChart.setData(pieData); 
    pieChart.invalidate(); 

} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 


     case android.R.id.home: 

      onBackPressed(); 
      return true; 

     default: 
      return super.onOptionsItemSelected(item); 
    } 

} 


@Override 
public void onBackPressed(){ 
    super.onBackPressed(); 
} 
} 

} 

:これは私のPieChartActivityある

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 


     case android.R.id.home: 

      onBackPressed(); 
      return true; 

     case R.id.action_piechart: 

      Intent intentPiechart = new Intent(Userlist.this, PieChartActivity.class); 
      startActivity(intentPiechart); 

      return true; 
     case R.id.action_logout: 
      session.setLoggedin(false); 
      Intent intentMain = new Intent(Userlist.this, MainActivity.class); 
      startActivity(intentMain); 
      finish(); 
      return true; 
     // action with ID action_settings was selected 




     default: 
      return super.onOptionsItemSelected(item); 
    } 

:私はPiceChartActivityに意図を呼び出すのはここ

です次にアプリがクラッシュします。どんな助けも素晴らしいでしょう。ありがとう。


以下は、logcatに表示されるコード領域です。

Canvas.java

public void setBitmap(@Nullable Bitmap bitmap) { 
     if (isHardwareAccelerated()) { 
      throw new RuntimeException("Can't set a bitmap device on a HW accelerated canvas"); 
     } 

     if (bitmap == null) { 
      native_setBitmap(mNativeCanvasWrapper, null); 
      mDensity = Bitmap.DENSITY_NONE; 
     } else { 
      if (!bitmap.isMutable()) { 
       throw new IllegalStateException(); 
      } 
      throwIfCannotDraw(bitmap); 

      native_setBitmap(mNativeCanvasWrapper, bitmap); 
      mDensity = bitmap.mDensity; 
     } 

     mBitmap = bitmap; 
    } 

PieChartRenderer.java

public void releaseBitmap() { 
     if (mBitmapCanvas != null) { 
      mBitmapCanvas.setBitmap(null); /*points to this line*/ 
      mBitmapCanvas = null; 
     } 
     if (mDrawBitmap != null) { 
      mDrawBitmap.get().recycle(); 
      mDrawBitmap.clear(); 
      mDrawBitmap = null; 
     } 
    } 

PieChart.java

@Override 
    protected void onDetachedFromWindow() { 
     // releases the bitmap in the renderer to avoid oom error 
     if (mRenderer != null && mRenderer instanceof PieChartRenderer) { 
      ((PieChartRenderer) mRenderer).releaseBitmap(); 
     } 
     super.onDetachedFromWindow(); 
    } 
+0

あなたはなぜandroid.graphics.Canvas.setBitmap(Canvas.java:177)がnullになるのかチェックしてください。 –

+0

onBackPressedを上書きしないでください。それは奇妙に見える。 –

+0

私はonBackPressedメソッドを編集し、新しいlogcatも投稿しました。 –

答えて

0
@Override 
public void onBackPressed(){ 
super.onBackPressed(); 
    } 

があなたの背中を交換しては、これでメソッドを押します。

+0

に示されているクラスからコードの部分を追加しました。これも試しました。それでも同じエラーが表示されます。 –

0

私はapi12のAVDを使用していましたが、ドキュメンテーションでは最小sdkが16であることがわかりました。愚かな私。

コードはapi> = 16のAVDで完全に機能します。助けようとした皆様に感謝します。 :)

関連する問題