我收到此“ NullPointerException”错误

时间:2020-02-09 14:46:19

标签: java android

我从在线获取使用JSON绘制折线图的代码中获取了NullPointerException。问题是我绝对是android的初学者,我无法修复它,请帮忙。代码如下

JSON文件

{
  "id": 1,
  "coffee": [
    {
      "Date": "18:25:43",
      "Estimate": 25.4
    },
    {
      "Date": "18:35:43",
      "Estimate": 27.3
    },
    {
      "Date": "18:45:21",
      "Estimate": 26.3
    },
    {
      "Date": "18:55:43",
      "Estimate": 25.2
    }
  ]
}

AppController.java文件

    public class AppController extends Application {
    public static final String TAG = AppController.class.getSimpleName();
    private RequestQueue mRequestQueue;
    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 <T> void addToRequestQueue(Request<T> req, String tag) {
        req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
        getRequestQueue().add(req);
    }
}

MainActivity.java文件

public class MainActivity extends AppCompatActivity {
    Button button;
    ArrayList<Entry> x;
    ArrayList<String> y;
    private LineChart mChart;
    public String TAG = "AppController";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button=(Button)findViewById(R.id.click);


        x = new ArrayList<Entry>();
        y = new ArrayList<String>();
        mChart = (LineChart)findViewById(R.id.chart1);
        mChart.setDrawGridBackground(false);
        mChart.setDescription("");
        mChart.setTouchEnabled(true);
        mChart.setDragEnabled(true);
        mChart.setScaleEnabled(true);
        mChart.setPinchZoom(true);
        //mChart.setMarkerView(mv);
        XAxis xl = mChart.getXAxis();
        xl.setAvoidFirstLastClipping(true);
        YAxis leftAxis = mChart.getAxisLeft();
        leftAxis.setInverted(true);
        YAxis rightAxis = mChart.getAxisRight();
        rightAxis.setEnabled(false);
        Legend l = mChart.getLegend();
        l.setForm(Legend.LegendForm.LINE);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawChart();
            }
        });
    }
    private void drawChart() {

        String tag_string_req = "req_chart";


        StringRequest strReq = new StringRequest(Request.Method.POST, "https://api.myjson.com/bins/10w5bk",
                new Response.Listener<String>() {

                    @Override
                    public void onResponse(String response) {

                        Log.d(TAG, "Response: " + response);

                        try {
                            JSONObject jsonObject = new JSONObject(response);
                            String id = jsonObject.getString("id");
                            JSONArray jsonArray = jsonObject.getJSONArray("coffee");
                            for (int i = 0; i < jsonArray.length(); i++) {


                               /* int value = jsonObject.getInt("value");
                                String date = jsonObject.getString("time");*/
                                int Estimate = jsonObject.getInt("Estimate");
                                String Date = jsonObject.getString("Date");
                                x.add(new Entry(Estimate, i));
                                y.add(Date);

                            }
                            LineDataSet set1 = new LineDataSet(x, "NAV Data Value");
                            set1.setLineWidth(1.5f);
                            set1.setCircleRadius(4f);
                            LineData data = new LineData(y, set1);
                            mChart.setData(data);
                            mChart.invalidate();

                        }

                        catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }, new Response.ErrorListener() {

            @Override
            public void onErrorResponse(VolleyError error) {
                Log.e(TAG, "Error: " + error.getMessage());
            }
        });
        strReq.setRetryPolicy(new RetryPolicy() {

            @Override
            public void retry(VolleyError arg0) throws VolleyError {
            }

            @Override
            public int getCurrentTimeout() {
                return 0;
            }

            @Override
            public int getCurrentRetryCount() {
                return 0;
            }
        });
        strReq.setShouldCache(false);
        AppController.getInstance().addToRequestQueue(strReq, tag_string_req);
    }

}

activity_mmain.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.github.mikephil.charting.charts.LineChart
        android:id="@+id/chart1"
        android:layout_width="match_parent"
        android:layout_height="484dp" />
    <Button
        android:id="@+id/click"
        android:layout_below="@+id/chart1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

</RelativeLayout>

错误日志消息

进程:com.example.stackoverflowtry,PID:32279 java.lang.NullPointerException:尝试调用虚拟方法'void com.example.stackoverflowtry.AppController.addToRequestQueue(com.android.volley.Request, java.lang.String)'引用空对象 在com.example.stackoverflowtry.MainActivity.drawChart(MainActivity.java:139) 在com.example.stackoverflowtry.MainActivity.access $ 000(MainActivity.java:30) 在com.example.stackoverflowtry.MainActivity $ 1.onClick(MainActivity.java:66)

1 个答案:

答案 0 :(得分:2)

在这里抛出NullPointerException:

addToRequestQueue

尝试调用方法getInstance()。显然null返回onCreate。看来您的mInstance方法从未被调用,或者null被设置为MainActivity类中其他任何地方的if(typeof featuredObject === "undefined") { return ""; }

您应该确保该方法确实被调用。也许尝试设置一些断点以查看程序流程。

相关问题