如果您想了解ApachePOI-FileInputStream有效,文件对象失败的相关知识,那么本文是一篇不可错过的文章,我们将对NullPointerException进行全面详尽的解释,并且为您提
如果您想了解Apache POI-FileInputStream有效,文件对象失败的相关知识,那么本文是一篇不可错过的文章,我们将对NullPointerException进行全面详尽的解释,并且为您提供关于Android HttpUrlConnection getInputStream引发NullPointerException、android – achartengine toScreenPoint(double)总是返回nullPointerException、android – BufferedInputStream或FileInputStream IOException、android – Gradle Execution因任务extractReleaseAnnotations> java.lang.NullPointerException而失败的有价值的信息。
本文目录一览:- Apache POI-FileInputStream有效,文件对象失败(NullPointerException)(fileinputstream文件不存在)
- Android HttpUrlConnection getInputStream引发NullPointerException
- android – achartengine toScreenPoint(double)总是返回nullPointerException
- android – BufferedInputStream或FileInputStream IOException
- android – Gradle Execution因任务extractReleaseAnnotations> java.lang.NullPointerException而失败
Apache POI-FileInputStream有效,文件对象失败(NullPointerException)(fileinputstream文件不存在)
我尝试将所有工作表从一个工作簿复制到另一工作簿。事实是,如果我通过FileInputStreams读取工作簿,它可以正常工作,但不适用于文件对象。
请考虑以下方法:
import java.io.BufferedReader;import java.io.File;import java.io.FileFilter;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.URL;import java.util.ArrayList;import java.util.Iterator;import org.apache.commons.io.IOUtils;import org.apache.commons.io.filefilter.WildcardFileFilter;import org.apache.poi.EncryptedDocumentException;import org.apache.poi.openxml4j.exceptions.InvalidFormatException;import org.apache.poi.ss.SpreadsheetVersion;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.CellStyle;import org.apache.poi.ss.usermodel.CellType;import org.apache.poi.ss.usermodel.DataConsolidateFunction;import org.apache.poi.ss.usermodel.DateUtil;import org.apache.poi.ss.usermodel.Font;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.ss.usermodel.WorkbookFactory;import org.apache.poi.ss.util.AreaReference;import org.apache.poi.ss.util.CellReference;import org.apache.poi.xssf.usermodel.XSSFPivotTable;import org.apache.poi.xssf.usermodel.XSSFSheet;public void copyAllSheetsAcrossWorkbook(String oldWorkbook, String newWorkbook) throws EncryptedDocumentException, InvalidFormatException, IOException { FileInputStream fisOld = null; FileInputStream fisNew = null; Workbook oldWB = null; Workbook newWB = null; FileOutputStream fileOut = null; System.out.println("oldWorkbook: " + oldWorkbook); System.out.println("newWorkbook: " + newWorkbook); fisOld = new FileInputStream(oldWorkbook); fisNew = new FileInputStream(newWorkbook); // THIS WORKS // oldWB = WorkbookFactory.create(fisOld); // newWB = WorkbookFactory.create(fisNew); // THIS DOES NOT WORK oldWB = WorkbookFactory.create(new File(oldWorkbook)); newWB = WorkbookFactory.create(new File(newWorkbook)); if (newWB == null) { System.out.println("newWB is null"); } // CellStyle newStyle = newWB.createCellStyle(); Row row; Cell cell; copiedSheets = new ArrayList<String>(); for (int i = 0; i < oldWB.getNumberOfSheets(); i++) { XSSFSheet sheetFromOldWB = (XSSFSheet) oldWB.getSheetAt(i); String sheetNameFromOldWB = sheetFromOldWB.getSheetName(); XSSFSheet sheetForNewWB = (XSSFSheet) newWB.getSheet(sheetNameFromOldWB); if (sheetForNewWB != null) { int sheetIndex = newWB.getSheetIndex(sheetNameFromOldWB); newWB.removeSheetAt(sheetIndex); } LOGGER.info("Copying to new Workbook: " + sheetNameFromOldWB); sheetForNewWB = (XSSFSheet) newWB.createSheet(sheetFromOldWB.getSheetName()); for (int rowIndex = 0; rowIndex < sheetFromOldWB.getPhysicalNumberOfRows(); rowIndex++) { row = sheetForNewWB.createRow(rowIndex); for (int colIndex = 0; colIndex < sheetFromOldWB.getRow(rowIndex).getPhysicalNumberOfCells(); colIndex++) { cell = row.createCell(colIndex); // get cell from old WB''s sheet and when cell is null, return as blank cells. Cell c = sheetFromOldWB.getRow(rowIndex).getCell(colIndex, Row.MissingCellPolicy.CREATE_NULL_AS_BLANK); // Below is where all the copying is happening. // CellStyle origStyle = c.getCellStyle(); // newStyle.cloneStyleFrom(origStyle); // cell.setCellStyle(newStyle); switch (c.getCellTypeEnum()) { case STRING: cell.setCellValue(c.getRichStringCellValue().getString()); break; case NUMERIC: if (DateUtil.isCellDateFormatted(cell)) { cell.setCellValue(c.getDateCellValue()); } else { cell.setCellValue(c.getNumericCellValue()); } break; case BOOLEAN: cell.setCellValue(c.getBooleanCellValue()); break; case FORMULA: cell.setCellFormula(c.getCellFormula()); break; default: break; } } } copiedSheets.add(oldWB.getSheetName(i)); } fileOut = new FileOutputStream(newWorkbook); newWB.write(fileOut); // <------ HERE I GET NULLPOINTEREXCEPTION fisOld.close(); fisNew.close(); oldWB.close(); fileOut.close(); newWB.close();
我在收到以下异常newWB.write(fileOut);
:
Exception in thread "main" org.apache.poi.POIXMLException: java.lang.NullPointerExceptionat org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:168)at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:246)at com.capgemini.toolkit.App.copyAllSheetsAcrossWorkbook(App.java:263)at com.capgemini.toolkit.App.main(App.java:58)Caused by: java.lang.NullPointerExceptionat org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.read(ZipSecureFile.java:210)at com.sun.org.apache.xerces.internal.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)at org.apache.poi.util.DocumentHelper.readDocument(DocumentHelper.java:140)at org.apache.poi.POIXMLTypeLoader.parse(POIXMLTypeLoader.java:143)at org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.PropertiesDocument$Factory.parse(Unknown Source)at org.apache.poi.POIXMLProperties.<init>(POIXMLProperties.java:78)at org.apache.poi.POIXMLDocument.getProperties(POIXMLDocument.java:166)... 3 more
在POI文档中,始终会提到File
由于内存消耗较低而更好地使用了对象。这就是为什么我想知道为什么它不适用于File
对象。
为了进行测试,这是在主方法中运行的唯一方法,我使用了2个带有一些伪数据的新Excel文件(.xlsx)。
有谁知道为什么它不能与File
对象一起使用?难道我做错了什么?
仅供参考:我正在使用POI 3.16。
答案1
小编典典使用a File
而不是a FileInputStream
来打开aWorkbook
会减少内存占用,因为在XSSF
(*.xlsx
)的情况下,ZipPackage将*.xlsx
直接从文件中打开,而不是将全部ZIP
内容读取到内存中。
但这也意味着,将ZipPackage
打开文件,直到Workbook
将文件关闭。因此,在Workbook
将被关闭之前,无法同时写入该文件。因此,由于不可能将Workbook
内容从Workbook
打开时的位置写回到相同的文件,因此,如果您只想从中读取内容,则使用aFile
代替FileInputStream
打开aWorkbook
可以Workbook
。但是,如果您要读取和写入相同的文件,则无法使用。然后FileInputStream
和FileOutputStream
需要。
因此,在您的情况下,您尝试Workbook newWB
从中读取File
,然后使用将其Workbook
写入同一文件
fileOut = new FileOutputStream(newWorkbook);newWB.write(fileOut);
文件已经打开时。这失败了。
但:
fisNew = new FileInputStream(newWorkbook); oldWB = WorkbookFactory.create(new File(oldWorkbook)); newWB = WorkbookFactory.create(fisNew);... fileOut = new FileOutputStream(newWorkbook); newWB.write(fileOut); fileOut.close(); oldWB.close(); newWB.close();
应该管用。
顺便说一句:如果您使用File
,则您不应FileInputStream
在同一文件中使用。所以不要使用fisOld
。
使用的另一个缺点File
,而不是FileInputStream
打开一个Workbook
是同时关闭Workbook
,因此隐含关闭垫层文件系统(POIFSFileSystem
在的情况下,HSSF
并ZipPackage
在以下情况下XSSF
)的文件中获取更新的最后修改日期。没有对文件进行任何更改,但是文件已被打开并将新的文件写入文件系统。这就是为什么上次修改日期被更新的原因。
编辑2017年9月21日:使用a的缺点File
似乎比想像的要严重。OPCPackage.close还将所有更改保存到底层OPCPackage
。因此,如果您XSSFWorkbook
从文件中打开一个文件,然后想使用将更改内容写入另一个文件中write(java.io.OutputStreamstream)
,则在关闭时也会更改源文件OPCPackage
。仅当发生该问题 write(java.io.OutputStreamstream)
从用于XSSFWorkbook
从那以后POIXMLDocument.write被称为它调用POIXMLDocumentPart.onSave其中“保存在底层OOXML包的变化。”。因此,系统OPCPackage
会在关闭前使用所有更改进行更新。
简短示例:
import org.apache.poi.ss.usermodel.*;import java.io.File;import java.io.FileOutputStream;class ReadAndWriteExcelWorkbook { public static void main(String[] args) throws Exception { Workbook workbook = WorkbookFactory.create(new File("file.xlsx")); Sheet sheet = workbook.getSheetAt(0); Row row = sheet.getRow(0); if (row == null) row = sheet.createRow(0); Cell cell = row.getCell(0); if (cell == null) cell = row.createCell(0); cell.setCellValue("changed"); FileOutputStream out = new FileOutputStream("fileNew.xlsx"); workbook.write(out); out.close(); workbook.close(); }}
此代码之后,两个文件fileNew.xlsx
以及file.xlsx
都被更改。
Android HttpUrlConnection getInputStream引发NullPointerException
我正在尝试从以下网址下载图像:
https://hme_player_pictures.s3.amazonaws.com/test-512813ed3b83286c72f376c7-thumb100.jpg
这是堆栈跟踪:
03-21 12:58:04.040: W/System.err(7084): java.lang.NullPointerException
03-21 12:58:04.040: W/System.err(7084): at libcore.net.http.httpconnection$Address.hashCode(httpconnection.java:343)
03-21 12:58:04.045: W/System.err(7084): at java.util.HashMap.get(HashMap.java:298)
03-21 12:58:04.050: W/System.err(7084): at libcore.net.http.httpconnectionPool.get(httpconnectionPool.java:67)
03-21 12:58:04.050: W/System.err(7084): at libcore.net.http.httpconnection.connect(httpconnection.java:128)
03-21 12:58:04.050: W/System.err(7084): at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:308)
03-21 12:58:04.055: W/System.err(7084): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.makeSslConnection(HttpsURLConnectionImpl.java:460)
03-21 12:58:04.055: W/System.err(7084): at libcore.net.http.HttpsURLConnectionImpl$HttpsEngine.connect(HttpsURLConnectionImpl.java:432)
03-21 12:58:04.055: W/System.err(7084): at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:282)
03-21 12:58:04.060: W/System.err(7084): at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:232)
03-21 12:58:04.065: W/System.err(7084): at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:273)
03-21 12:58:04.065: W/System.err(7084): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
03-21 12:58:04.070: W/System.err(7084): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:270)
03-21 12:58:04.070: W/System.err(7084): ...
码:
URL imageUrl = new URL(url);
HttpURLConnection c = (HttpURLConnection)imageUrl.openConnection();
InputStream in = c.getInputStream(); // Nullpointer exception on this line, c is definitely not null, I debugged
无法弄清楚为什么会引发NullPointerException.上面的网址确实可以在浏览器中使用.
解决方法:
对于它的价值,我在Android HTTP库中看到很多错误.从条码扫描器中,我可以看到大约3500万人员的堆栈跟踪,因此,我想我已经看到了其中的一切.这是我们在下面的应用程序中发现并吞下的所有怪异内容.我建议您将其作为平台错误来解决,并优雅地失败.
https://code.google.com/p/zxing/source/browse/trunk/android/src/com/google/zxing/client/android/HttpHelper.java
private static int safelyConnect(String uri, HttpURLConnection connection) throws IOException {
try {
connection.connect();
} catch (NullPointerException npe) {
// this is an Android bug: http://code.google.com/p/android/issues/detail?id=16895
Log.w(TAG, "Bad URI? " + uri);
throw new IOException(npe.toString());
} catch (IllegalArgumentException iae) {
// Also seen this in the wild, not sure what to make of it. Probably a bad URL
Log.w(TAG, "Bad URI? " + uri);
throw new IOException(iae.toString());
} catch (SecurityException se) {
// due to bad VPN settings?
Log.w(TAG, "Restricted URI? " + uri);
throw new IOException(se.toString());
} catch (indexoutofboundsexception ioobe) {
// Another Android problem? https://groups.google.com/forum/?fromgroups#!topic/google-admob-ads-sdk/U-WfmYa9or0
Log.w(TAG, "Bad URI? " + uri);
throw new IOException(ioobe.toString());
}
try {
return connection.getResponseCode();
} catch (NullPointerException npe) {
// this is maybe this Android bug: http://code.google.com/p/android/issues/detail?id=15554
Log.w(TAG, "Bad URI? " + uri);
throw new IOException(npe.toString());
} catch (NumberFormatException nfe) {
// Again seen this in the wild for bad header fields in the server response!
Log.w(TAG, "Bad server status? " + uri);
throw new IOException(nfe.toString());
}
}
android – achartengine toScreenPoint(double)总是返回nullPointerException
org.achartengine.chart.XYChart.toScreenPoint(XYChart.java:867)中的java.lang.NullPointerException
我看到图表的mScreenR为空
不使用此方法toScreenPoint(双)图表运行良好这是代码:
package com.insights.insights.gui; import java.util.ArrayList; import org.achartengine.ChartFactory; import org.achartengine.GraphicalView; import org.achartengine.chart.LineChart; import org.achartengine.chart.PointStyle; import org.achartengine.chart.XYChart; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import com.insights.insights.R; import com.insights.insights.local.ApplicationsController; import com.insights.insights.model.AppMetrics; import com.insights.insights.model.Application; import com.insights.insights.model.Applications; import com.insights.insights.model.Day; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsoluteLayout; import android.widget.LinearLayout; import android.widget.Toast; public class ChartFragment extends Fragment { private XYMultipleSeriesRenderer renderer; private XYMultipleSeriesDataset dataset; private GraphicalView graphicalView; private XYSeries firstSeries; private XYChart chart=null; private String apiKey; private ArrayList<Day> days; private View view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); apiKey = getArguments().getString(getString(R.string.tabs_activity_api_key)); } @Override public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) { View v = inflater.inflate(R.layout.chart_fragment,container,false); v.findViewById(R.idChartFragment.container).requestFocus(); this.view = v; return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // Obtaining data to plot Applications applications = ApplicationsController.getInstance(getActivity()).getApplications(); ArrayList<Application> applicationArray = applications.getApplication(); if (applicationArray != null && !applicationArray.isEmpty()) { for (int i = 0; i < applicationArray.size(); i++) { if (applicationArray.get(i).getApiKey().equals(apiKey)) { ArrayList<AppMetrics> appMetrics = applicationArray.get(i).getAppMetrics(); for (int j = 0; j < appMetrics.size(); j++) { if (appMetrics.get(j).getMetric().equals("Sessions")) { days = appMetrics.get(j).getDay(); break; } } } } } // If there isn''t any item to plot and show a toast if (days == null) { Toast toast = Toast.makeText(getActivity(),R.string.chart_fragment_no_items,Toast.LENGTH_LONG); toast.show(); return; } // Ploting the items dataset = getDataset(days); renderer = getRenderer(); setRendererStyling(renderer); // add plot to the layout if (graphicalView == null) { LinearLayout layout = (LinearLayout) view.findViewById(R.idChartFragment.Chart); chart= new LineChart(dataset,renderer); graphicalView = new GraphicalView(getActivity(),chart); renderer.setSelectableBuffer(11); layout.addView(graphicalView); } else{ graphicalView.repaint(); } if(chart!=null&&firstSeries!=null){ for(int i=0;i<firstSeries.getItemCount();i++){ double x = firstSeries.getX(i); double y = firstSeries.getY(i); double[] screenPoint = chart.toScreenPoint(new double[] { x,y },0); Log.i("puntos",x + "," + y + " = "+" ("+screenPoint[0]+","+screenPoint[1]+")"); } } } /** * Method for set the style of the plotter window and the string at the x * axis * * @param mRenderer * render to put style in * * @param dataSetX * string to set at x axis */ private void setRendererStyling(XYMultipleSeriesRenderer mRenderer) { mRenderer.setApplyBackgroundColor(false); mRenderer.setMarginsColor(R.drawable.transperent_color); mRenderer.setMargins(new int[] { 0,0 }); mRenderer.setShowAxes(false); mRenderer.setZoomButtonsVisible(false); mRenderer.setExternalZoomEnabled(false); mRenderer.setPointSize(20); mRenderer.setClickEnabled(false); mRenderer.setdisplayValues(false); mRenderer.setXLabels(0); mRenderer.setYLabels(0); mRenderer.setPanEnabled(false); mRenderer.setZoomEnabled(false); mRenderer.setShowLegend(false); } /** * Method to introduce the values of the y axis * * @param dataSetY * data to set at axis y * @return the data to set */ private XYMultipleSeriesDataset getDataset(ArrayList<Day> days) { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); firstSeries = new XYSeries(""); for (int i = 0; i < 12; i++) { int value = Integer.parseInt(days.get(days.size() - (13 - i)).getValue()); firstSeries.add(i,value); } dataset.addSeries(firstSeries); return dataset; } /** * Method for set the style of the line you want to plot and create a new * renderer * * @return the renderer */ private XYMultipleSeriesRenderer getRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(getResources().getColor(R.color.grey_number_label_background)); r.setlinewidth(getResources().getInteger(R.integer.chart_fragment_line_width)); // r.setdisplayChartValues(true); r.setPointStyle(PointStyle.POINT); r.setFillPoints(true); renderer.addSeriesRenderer(r); return renderer; } }
这是布局文件:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+idChartFragment/container" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <LinearLayout android:id="@+idChartFragment/Chart" android:layout_width="300dp" android:layout_height="300dp" android:orientation="horizontal"/> <AbsoluteLayout android:id="@+idChartFragment/absolute" android:layout_width="300dp" android:layout_height="300dp"/> </RelativeLayout>
第二编辑:
我想做这样的事情:
用我的代码我这样做:
这是我的代码:
package com.insights.insights.gui; import java.util.ArrayList; import java.util.List; import org.achartengine.GraphicalView; import org.achartengine.chart.ClickableArea; import org.achartengine.chart.LineChart; import org.achartengine.chart.PointStyle; import org.achartengine.chart.XYChart; import org.achartengine.model.SeriesSelection; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.SimpleSeriesRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.text.Layout; import android.util.AttributeSet; import android.util.Log; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.AbsoluteLayout; import android.widget.AbsoluteLayout.LayoutParams; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.maps.itemizedoverlay.OnFocuschangelistener; import com.insights.insights.R; import com.insights.insights.local.ApplicationsController; import com.insights.insights.model.AppMetrics; import com.insights.insights.model.Application; import com.insights.insights.model.Applications; import com.insights.insights.model.Day; /** * * @author Manuel Plazas Palacio * */ public class ChartFragment extends Fragment { private XYMultipleSeriesRenderer renderer; private XYMultipleSeriesDataset dataset; private GraphicalView graphicalView; private XYSeries firstSeries; private XYChart chart = null; private AbsoluteLayout absoluteLayout; private ImageView point; private LinearLayout pointInfoConatiner; private TextView pointNumberText; private TextView pointNameText; private TextView pointDateText; private Typeface avenirHeavy; private Typeface avenirLight; private String apiKey; private String metricName; private ArrayList<Day> days; // The max and the min values displayed private double max = 0; private double min = 0; private View view; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); apiKey = getArguments().getString(getString(R.string.tabs_activity_api_key)); metricName = "Sessions"; } @Override public View onCreateView(LayoutInflater inflater,false); v.findViewById(R.idChartFragment.container).requestFocus(); this.view = v; absoluteLayout = (AbsoluteLayout) v.findViewById(R.idChartFragment.absolute); // pointInfoConatiner = (LinearLayout) v.findViewById(R.idChartFragment.pointInfoContainer); // pointNumberText = (TextView) v.findViewById(R.idChartFragment.pointNumberText); // pointNameText = (TextView) v.findViewById(R.idChartFragment.pointNameText); // pointDateText = (TextView) v.findViewById(R.idChartFragment.pointDateText); // // pointNameText.setText(metricName); // Obtaining data to plot Applications applications = ApplicationsController.getInstance(getActivity()).getApplications(); ArrayList<Application> applicationArray = applications.getApplication(); if (applicationArray != null && !applicationArray.isEmpty()) { for (int i = 0; i < applicationArray.size(); i++) { if (applicationArray.get(i).getApiKey().equals(apiKey)) { ArrayList<AppMetrics> appMetrics = applicationArray.get(i).getAppMetrics(); for (int j = 0; j < appMetrics.size(); j++) { if (appMetrics.get(j).getMetric().equals(metricName)) { days = appMetrics.get(j).getDay(); break; } } } } } // If there isn''t any item to plot and show a toast if (days == null) { Toast toast = Toast.makeText(getActivity(),Toast.LENGTH_LONG); toast.show(); } // Ploting the items dataset = getDataset(days); renderer = getRenderer(); setRendererStyling(renderer); // add plot to the layout if (graphicalView == null) { LinearLayout layout = (LinearLayout) view.findViewById(R.idChartFragment.Chart); chart = new LineChart(dataset,renderer); graphicalView = new GraphicalView(getActivity(),chart); renderer.setSelectableBuffer(11); layout.addView(graphicalView); } else { graphicalView.repaint(); } return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); avenirHeavy = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Avenir Heavy.ttf"); avenirLight = Typeface.createFromAsset(getActivity().getAssets(),"fonts/Avenir Light.ttf"); graphicalView.setonClickListener(new OnClickListener() { @Override public void onClick(View v) { SeriesSelection seriesSelection = graphicalView.getCurrentSeriesAndPoint(); double[] xy = graphicalView.toRealPoint(0); //creating the views createOnClickPointsView(); if (seriesSelection != null) { // debug Log.d("Punto",seriesSelection.getXValue() + "," + seriesSelection.getValue()); double x = firstSeries.getX(seriesSelection.getPointIndex() + 1); double y = firstSeries.getY(seriesSelection.getPointIndex() + 1); double[] screenPoint = chart.toScreenPoint(new double[] { x,y }); // debug Log.d("Chart point","Chart element in series index " + seriesSelection.getSeriesIndex() + " data point index " + seriesSelection.getPointIndex() + " was clicked" + " closest point value X=" + seriesSelection.getXValue() + ",Y=" + seriesSelection.getValue() + " clicked point value X=" + (float) xy[0] + ",Y=" + (float) xy[1]); Log.d("Punto pantalla"," (" + screenPoint[0] + "," + screenPoint[1] + ")"); int value = Integer.parseInt(days.get((int) (days.size() - (13 - x))).getValue()); String date = days.get((int) (days.size() - (13 - x))).getDate(); pointNumberText.setText(value + ""); pointDateText.setText(date); // drawing point info absoluteLayout.addView(pointInfoConatiner,new LayoutParams(getResources().getDrawable(R.drawable.graficapin) .getIntrinsicWidth(),getResources().getDrawable(R.drawable.graficapin).getIntrinsicHeight(),(int) (screenPoint[0] - (getResources().getDrawable(R.drawable.graficapin).getIntrinsicWidth() / 2)),(int) (screenPoint[1] - (getResources().getDrawable(R.drawable.graficapin).getIntrinsicHeight())))); // drawing point clicked absoluteLayout.addView(point,new LayoutParams(getResources().getDrawable(R.drawable.puntoon).getIntrinsicWidth(),getResources().getDrawable(R.drawable.puntoon).getIntrinsicHeight(),(int) (screenPoint[0] - (getResources() .getDrawable(R.drawable.puntoon).getIntrinsicWidth() / 2)),(int) (screenPoint[1] - ((getResources() .getDrawable(R.drawable.puntoon).getIntrinsicHeight()) / 4)))); } } }); } /** * Method for set the style of the plotter window and the string at the x * axis * * @param mRenderer * render to put style in * * @param dataSetX * string to set at x axis */ private void setRendererStyling(XYMultipleSeriesRenderer mRenderer) { mRenderer.setApplyBackgroundColor(false); mRenderer.setMarginsColor(R.drawable.transperent_color); mRenderer.setMargins(new int[] { 0,0 }); mRenderer.setShowAxes(false); mRenderer.setZoomButtonsVisible(false); mRenderer.setExternalZoomEnabled(false); mRenderer.setPointSize(getResources().getInteger(R.integer.chart_fragment_point_size)); mRenderer.setClickEnabled(true); mRenderer.setdisplayValues(false); mRenderer.setXLabels(0); mRenderer.setYLabels(0); mRenderer.setPanEnabled(true); mRenderer.setZoomEnabled(false); mRenderer.setShowLegend(false); mRenderer.setYAxisMax(max + 10); mRenderer.setYAxisMin(min - 10); } /** * Method to introduce the values of the y axis * * @param dataSetY * data to set at axis y * @return the data to set */ private XYMultipleSeriesDataset getDataset(ArrayList<Day> days) { XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); firstSeries = new XYSeries(""); for (int i = 0; i < 12; i++) { int value = Integer.parseInt(days.get(days.size() - (13 - i)).getValue()); firstSeries.add(i,value); } dataset.addSeries(firstSeries); XYSeries secondSeries = new XYSeries(""); for (int i = 1; i < 11; i++) { int value = Integer.parseInt(days.get(days.size() - (13 - i)).getValue()); if (i == 1) { max = value; min = value; } if (value > max) max = value; if (value < min) min = value; secondSeries.add(i,value); } dataset.addSeries(secondSeries); return dataset; } /** * Method for set the style of the line you want to plot and create a new * renderer * * @return the renderer */ private XYMultipleSeriesRenderer getRenderer() { XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); //First chart with the line XYSeriesRenderer r = new XYSeriesRenderer(); r.setColor(getResources().getColor(R.color.grey_number_label_background)); r.setlinewidth(getResources().getInteger(R.integer.chart_fragment_line_width)); // r.setdisplayChartValues(true); r.setPointStyle(PointStyle.POINT); r.setFillPoints(true); renderer.addSeriesRenderer(r); // Second chart with the points XYSeriesRenderer r1 = new XYSeriesRenderer(); r1.setColor(getResources().getColor(R.color.purple_chart_points)); r1.setlinewidth(0); r1.setFillPoints(true); r1.setPointStyle(PointStyle.CIRCLE); renderer.addSeriesRenderer(r1); return renderer; } public XYSeries getFirstSeries() { return firstSeries; } public void setFirstSeries(XYSeries firstSeries) { this.firstSeries = firstSeries; } public XYChart getChart() { return chart; } public void setChart(XYChart chart) { this.chart = chart; } /** * Method for create the views when clicking on a point of the chart */ private void createOnClickPointsView() { //If the info is already visible if (pointInfoConatiner != null) absoluteLayout.removeView(pointInfoConatiner); // If the point is drawn if (point != null) absoluteLayout.removeView(point); pointInfoConatiner = new LinearLayout(getActivity()); pointInfoConatiner.setBackgroundDrawable(getResources().getDrawable(R.drawable.graficapin)); pointInfoConatiner.setorientation(LinearLayout.VERTICAL); pointInfoConatiner.setGravity(Gravity.CENTER_HORIZONTAL); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(0,8,0); pointNumberText = new TextView(getActivity()); pointNumberText.setTextSize(18); pointNumberText.setTextColor(getResources().getColor(R.color.purple_chart_points)); pointNumberText.setTypeface(avenirHeavy); pointNumberText.setGravity(Gravity.CENTER); pointNameText = new TextView(getActivity()); pointNameText.setTextSize(18); pointNameText.setTextColor(getResources().getColor(R.color.grey_users_label)); pointNameText.setTypeface(avenirLight); pointNameText.setText(metricName); pointNameText.setGravity(Gravity.CENTER); pointDateText = new TextView(getActivity()); pointDateText.setTextSize(11); pointDateText.setTextColor(getResources().getColor(R.color.grey_users_label)); pointDateText.setTypeface(avenirHeavy); pointDateText.setGravity(Gravity.CENTER); pointInfoConatiner.addView(pointNumberText,layoutParams); layoutParams.setMargins(0,2,0); pointInfoConatiner.addView(pointNameText,1,layoutParams); pointInfoConatiner.addView(pointDateText,layoutParams); point = new ImageView(getActivity()); point.setimageDrawable(getResources().getDrawable(R.drawable.puntoon)); } }
任何人都知道我怎么能:
1 – 退出底部边框
2 – 退出粉红色图表的线条
3 – 触摸点时图表不移动
4-当我询问屏幕点时为什么多次y值返回无穷大
解决方法
另请注意,调用方法时必须已显示图表.如果图表没有显示在屏幕上,那么就无法计算出来.
android – BufferedInputStream或FileInputStream IOException
我刚刚发布了一个Android应用程序,它解析本地文件并对数据进行一些处理.
几天前,我的一位客户报告了一个错误,每次他试图处理他的文件时应用程序崩溃.
这是他发给我的错误日志:
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: lock == null
at java.io.Reader.<init>(Reader.java:64)
at java.io.InputStreamReader.<init>(InputStreamReader.java:120)
与此相关的代码是这样的:
// EDIT 1: Following greenapps comment I will put a more realistic version of this
// method (The first version was invented because I wanted to be breaf)
public void selectFile()
{
List<File> files = getDocsToParse();
this.listview.setAdapter(this.myadapter);
this.listview.setonItemClickListener(new OnItemClickListener()
{
...
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
parseFile(files.get(position));
}
...
}
this.myadapter.addFiles(files);
}
public static List<File> getDocsToParse() {
File sdcard = Environment.getExternalStorageDirectory();
File subdir = new File(sdcard, "MyAppFolder/Files/");
// EDIT 2: I'm using subdir.mkdirs(); because I want to
// create MyAppFolder/Files/ folders the first time the user use the app.
// Is this not correct? Should I create these folders any other way?
if (!subdir.exists()) {
subdir.mkdirs();
}
File files[] = subdir.listFiles();
List<File> filterFiles = new ArrayList<File>();
for (int i = 0; i < files.length; i++) {
File file = files[i];
filterFiles.add(file);
}
return filterFiles;
}
public void parseFile(File filetoParse)
{
long totalSize = 0;
InputStream is = null;
try {
totalSize = filetoParse.length();
is = new BufferedInputStream(new FileInputStream(filetoParse));
} catch (IOException e) {
e.printstacktrace();
}
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
StringTokenizer st = null;
try {
while ((line = reader.readLine()) != null) {
// Here I parse the file
}
} catch (IOException e) {
e.printstacktrace();
}
}
崩溃的线是这一行:
reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
我知道这是因为“是”是空的,我应该抓住这个案例,以避免应用程序崩溃(我将在我的下一个版本中修复此问题).
编辑3:你是对的,greenapps,我会在使用之前检查是否为null,在其他情况下我不会使用它.
我知道“is”是null,因为有一个IOException这样做:
totalSize = filetoParse.length();
is = new BufferedInputStream(new FileInputStream(filetoParse));
编辑4:当然,如果这给了我一个IOEXception,我将不得不改变我的代码,使一个完全不同的东西.
我无法在Internet上找到原因,因此这两行代码可能会抛出IOException.
认为filetoParse没问题,或者至少不是null,因为我将这个“文件”列表传递给适配器,用files.get(i).getName()显示它们的文件名,并正确显示名称.
我必须补充说,要处理的文件非常大并且具有敏感的个人数据,因此用户无法将其发送给我,因此我可以使用它进行测试.
没有我的文件给我这个错误,没有有问题的文件,我很难跟踪问题所以我不得不猜测.知道什么原因会导致这个错误吗?
非常感谢和亲切的问候!
编辑5:遵循ctarabusi建议我已将我的parseFile方法更改为:
public void parseFile(File filetoParse)
{
long totalSize = 0;
InputStream is = null;
try {
totalSize = filetoParse.length();
is = new BufferedInputStream(new FileInputStream(filetoParse));
BufferedReader reader = null;
reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String line = "";
StringTokenizer st = null;
while ((line = reader.readLine()) != null) {
// Here I parse the file
}
} catch (IOException e) {
Toast.makeText(getApplicationContext(), "Error parsing file", Toast.LENGTH_LONG).show();
e.printstacktrace();
} finally {
if(is != null)
{
try
{
is.close();
}
catch (IOException e)
{
Log.e("", e.getMessage(), e);
}
}
}
}
我的测试再次正常工作,但是用户告诉我他看到了“Error parsing file”消息,所以它还没有失败.
我还能检查什么?
解决方法:
可能是您的问题是您没有关闭输入流.
文件描述符和流是有限的资源,完成它们后释放它们非常重要.
通常在finally块中完成,如:
InputStream inputStream = null;
try
{
... use your input stream
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
finally
{
if (inputStream != null)
{
try
{
inputStream.close();
}
catch (IOException e)
{
Log.e(TAG, e.getMessage(), e);
}
}
}
android – Gradle Execution因任务extractReleaseAnnotations> java.lang.NullPointerException而失败
:hce_entry:extractReleaseAnnotations Failed Error:Execution Failed for task '':hce_entry:extractReleaseAnnotations''. > java.lang.NullPointerException (no error message)
我尝试使用–stacktrace选项获取更多信息来执行gradle构建,这是输出:
... :hce_entry:extractReleaseAnnotations Failed FAILURE: Build Failed with an exception. What went wrong: Execution Failed for task '':hce_entry:extractReleaseAnnotations''. java.lang.NullPointerException (no error message) Try: Run with --info or --debug option to get more log output. Exception is: org.gradle.api.tasks.TaskExecutionException: Execution Failed for task '':hce_entry:extractReleaseAnnotations''. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processtask(AbstractTaskPlanExecutor.java:62) at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:25) at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:110) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.access$000(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$1.proceed(DefaultBuildExecuter.java:43) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:37) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:30) at org.gradle.initialization.DefaultGradleLauncher$4.run(DefaultGradleLauncher.java:154) at org.gradle.internal.Factories$1.create(Factories.java:22) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:52) at org.gradle.initialization.DefaultGradleLauncher.dobuildStages(DefaultGradleLauncher.java:151) at org.gradle.initialization.DefaultGradleLauncher.access$200(DefaultGradleLauncher.java:32) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:99) at org.gradle.initialization.DefaultGradleLauncher$1.create(DefaultGradleLauncher.java:93) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90) at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:62) at org.gradle.initialization.DefaultGradleLauncher.dobuild(DefaultGradleLauncher.java:93) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:82) at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:94) at org.gradle.tooling.internal.provider.ExecuteBuildActionRunner.run(ExecuteBuildActionRunner.java:28) at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:43) at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:28) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:77) at org.gradle.launcher.exec.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:47) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:51) at org.gradle.launcher.exec.DaemonUsageSuggestingBuildActionExecuter.execute(DaemonUsageSuggestingBuildActionExecuter.java:28) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43) at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:170) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:237) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:210) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35) at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:206) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:33) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:54) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:35) at org.gradle.launcher.GradleMain.main(GradleMain.java:23) Caused by: java.lang.NullPointerException at com.android.build.gradle.tasks.annotations.Extractor$AnnotationData.appendExpression(Extractor.java:1603) at com.android.build.gradle.tasks.annotations.Extractor$AnnotationData.attributeString(Extractor.java:1592) at com.android.build.gradle.tasks.annotations.Extractor$AnnotationData.write(Extractor.java:1545) at com.android.build.gradle.tasks.annotations.Extractor$Item.write(Extractor.java:1792) at com.android.build.gradle.tasks.annotations.Extractor.writeExternalAnnotations(Extractor.java:769) at com.android.build.gradle.tasks.annotations.Extractor.export(Extractor.java:271) at com.android.build.gradle.tasks.annotations.Extractor$export$0.call(UnkNown Source) at com.android.build.gradle.tasks.ExtractAnnotations.compile(ExtractAnnotations.groovy:172) at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:227) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:220) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:209) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:585) at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:568) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61) ... 57 more BUILD Failed
这是我的build.gradle文件
apply plugin: ''com.android.library'' android { compileSdkVersion 19 buildToolsversion ''19.1.0'' buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile(''proguard-android.txt''),''proguard-rules.pro'' } debug { debuggable true minifyEnabled false } } } dependencies { compile project('':core'') compile project('':lib'') compile ''com.android.support:support-v4:23.2.0'' }
有人可以给我任何建议吗?我有点迷茫,无法找到解决问题的方法.
先感谢您.
解决方法
关于Apache POI-FileInputStream有效,文件对象失败和NullPointerException的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Android HttpUrlConnection getInputStream引发NullPointerException、android – achartengine toScreenPoint(double)总是返回nullPointerException、android – BufferedInputStream或FileInputStream IOException、android – Gradle Execution因任务extractReleaseAnnotations> java.lang.NullPointerException而失败等相关内容,可以在本站寻找。
本文标签: