Java 将json数组插入sqlite数据库时出现空指针异常
当我试图将json数组插入sqlite数据库时,我遇到了这个Nullpoint异常错误。 关于Elline 198 我们将从jsonarray获取值,并将其添加到内容值中。Java 将json数组插入sqlite数据库时出现空指针异常,java,android,json,sqlite,nullpointerexception,Java,Android,Json,Sqlite,Nullpointerexception,当我试图将json数组插入sqlite数据库时,我遇到了这个Nullpoint异常错误。 关于Elline 198 我们将从jsonarray获取值,并将其添加到内容值中。直到这一行,我将获取json响应的值,我已经在日志中打印了键和值。检查我是否得到任何空值。但这些值很好,我可以在日志中看到它们。当我的脱胶器进入下线时,我得到了错误。请帮我一次忙 12-07 11:25:34.290: E/AndroidRuntime(9177): FATAL EXCEPTION: AsyncTask
直到这一行,我将获取json响应的值,我已经在日志中打印了键和值。检查我是否得到任何空值。但这些值很好,我可以在日志中看到它们。当我的脱胶器进入下线时,我得到了错误。请帮我一次忙
12-07 11:25:34.290: E/AndroidRuntime(9177): FATAL EXCEPTION: AsyncTask #2
12-07 11:25:34.290: E/AndroidRuntime(9177): java.lang.RuntimeException: An error occured while executing doInBackground()
12-07 11:25:34.290: E/AndroidRuntime(9177): at android.os.AsyncTask$3.done(AsyncTask.java:200)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.lang.Thread.run(Thread.java:1096)
12-07 11:25:34.290: E/AndroidRuntime(9177): Caused by: java.lang.NullPointerException
12-07 11:25:34.290: E/AndroidRuntime(9177): at com.UserLogin.Onaroundyou$getOnaroundyou.doInBackground(Onaroundyou.java:198)
12-07 11:25:34.290: E/AndroidRuntime(9177): at com.UserLogin.Onaroundyou$getOnaroundyou.doInBackground(Onaroundyou.java:1)
12-07 11:25:34.290: E/AndroidRuntime(9177): at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-07 11:25:34.290: E/AndroidRuntime(9177): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
12-07 11:25:34.290: E/AndroidRuntime(9177): ... 4 more
提前谢谢
Evalues.put(InsertData.MyName,JSonArray1.getJSONObject(i).getString("MyName"));
private TextView电视;
字符串str、用户名、Eresult、密码;
对话1;
数据库助手插入数据;
字符串属性ID;
Context mContext=这个;
sqliteedb数据库;
JSONObject MyUserJsonObject;
受保护的Void doInBackground(字符串…参数){
//TODO自动生成的方法存根
HttpClient HttpClient=新的DefaultHttpClient();
//Dh.getWritableDatabase();
String text1=getString(R.String.site\u name);
字符串Url=text1+“详细信息”;
HttpPost HttpPost=新的HttpPost(Url);
试一试{
HttpResponse responseGet=httpclient.execute(httppost);
HttpEntity实体=responseGet.getEntity();
如果(实体!=null){
InputStream inputStreamResponse=entity.getContent();
Eresult=convertStreamToString(inputStreamResponse);
系统输出打印项次(Eresult);
Edb=InsertEData.getWritableDatabase();
ContentValues Evalues=新ContentValues();
Evalues.clear();
MyUserJsonObject=新的JSONObject(Eresult);
JSONObject menuObject=MyUserJsonObject.getJSONObject(“UserDetails”);
attributeId=menuObject.getString(“登录”);
System.out.println(“属性”+attributeId);
如果(attributeId.equals(“成功”)){
JSONObject EObject=menuObject.getJSONObject(“Ulist”);
JSONArray-array=EObject.getJSONArray(“列表”);
系统输出打印LN(耳环);
System.out.println(array.length());
对于(inti=0;i
数组似乎返回空值
请保留日志并检查和控制台。您的数组似乎返回空值 请保留日志并检查和控制 “有人知道为什么会发生这种情况吗?” 简单的回答是:因为某些对象是
null
,而它不应该是空的。潜在的罪魁祸首可能是InsertData
,JSonArray1
,或JSonArray1.getJSONObject(i)
的结果
没有更多的细节,很难确定确切的原因。我建议您中断代码以查找问题
“有人知道为什么会发生这种情况吗?”
简单的回答是:因为某些对象是null
,而它不应该是空的。潜在的罪魁祸首可能是InsertData
,JSonArray1
,或JSonArray1.getJSONObject(i)
的结果
没有更多的细节,很难确定确切的原因。我建议您中断代码以查找问题。但当我尝试打印值时,它会出现在logcat System.out.println(JSonArray1.getJSONObject(I.getString(“MyName”))中,但当我尝试打印值时,它会出现在logcat System.out.println(JSonArray1.getJSONObject(I.getString(“MyName”))问题中添加的代码请检查一次。我很困惑。是“我的名字”还是“名字”?我看不到代码中的第一行,而您声称导致错误的代码行确实如此。另外,您似乎在for循环中混合使用了
EventArray
和array
——我看不到在任何地方声明/初始化前者。其他一些变量也是如此。最后,您不断地打印循环中的第一个JSONObject,如果您对实际内容感兴趣,这就没有什么意义了……是MyName,Array,我只是打印第一个JSONObject来检查值是否出现。这里我只发布了复制的doinbackground方法。第一个值可能会通过,这一事实对后面的值没有任何意义。它确实表明array
不是null
,因此您可能可以从列表中划掉该项。但是,如果看到空指针,很可能是 private TextView tv;
String str, Username, Eresult,Password;
ProgressDialog dialog1;
DatabaseHelper InsertEData;
String attributeId ;
Context mContext = this;
SQLiteDatabase Edb ;
JSONObject MyUserJsonObject;
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
HttpClient httpclient = new DefaultHttpClient();
// Dh.getWritableDatabase();
String text1 = getString(R.string.site_name);
String Url=text1+"Details";
HttpPost httppost = new HttpPost(Url);
try {
HttpResponse responseGet = httpclient.execute(httppost);
HttpEntity entity = responseGet.getEntity();
if (entity != null) {
InputStream inputStreamResponse = entity.getContent();
Eresult = convertStreamToString(inputStreamResponse);
System.out.println(Eresult);
Edb= InsertEData.getWritableDatabase();
ContentValues Evalues = new ContentValues();
Evalues.clear();
MyUserJsonObject = new JSONObject(Eresult);
JSONObject menuObject = MyUserJsonObject.getJSONObject("UserDetails");
attributeId = menuObject.getString("login");
System.out.println("attribute "+attributeId);
if (attributeId.equals("success")) {
JSONObject EObject = menuObject.getJSONObject("Ulist");
JSONArray EArray = EObject.getJSONArray("List");
System.out.println(EArray);
System.out.println(EArray.length());
for (int i = 0; i < EArray.length(); i++) {
//System.out.println(EArray.getJSONObject(0).getString("Name").toString());
Evalues.put(InsertEData.EName, EArray.getJSONObject(i).getString("MyName"));
Evalues.put(InsertEData.ELocation, EArray.getJSONObject(i).getString("Location"));
Evalues.put(InsertEData.ETotal, EArray.getJSONObject(i).getString("Total"));
Evalues.put(InsertEData.Eimage, EArray.getJSONObject(i).getString("Image"));
Edb.insert(InsertEData.ESLIST, null, Evalues );
}
Evalues.clear();
inputStreamResponse.close();
}else {
System.out.println("Unable to load page - " + responseGet.getStatusLine());
}
}
else
System.out.println("Entity Null");
} catch (JSONException e) {
// TODO Auto-generated catch block
System.out.println("Network Error");
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return null;}