gpt4 book ai didi

java - NullPointerException getJSONArray

转载 作者:太空宇宙 更新时间:2023-11-04 13:54:08 25 4
gpt4 key购买 nike

您好,我在解析此代码的 onPostExecute 部分时遇到问题,我认为我做对了,但不知何故问题仍然存在。它说我在 postExecute() 上遇到了 nullPointerException方法第 74 行和第 46 行。有人可以帮我解决这个问题吗?

这是错误日志

E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.crow.androidappthirteen, PID: 25314
java.lang.NullPointerException
at com.example.crow.androidappthirteen.MainActivity$JSONParse.onPostExecute(MainActivity.java:74)
at com.example.crow.androidappthirteen.MainActivity$JSONParse.onPostExecute(MainActivity.java:46)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:157)
at android.app.ActivityThread.main(ActivityThread.java:5335)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081)
at dalvik.system.NativeStart.main(Native Method)

这是java文件:
public class MainActivity extends ActionBarActivity {
String id, name, course;
JSONArray students = null;


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

@Override
protected void onResume() {
// TODO Auto‐generated method stub
super.onResume();
new JSONParse().execute();
}

//JSON
/*THIS IS LINE 46*/ private class JSONParse extends AsyncTask<String, String, JSONObject> {
private ProgressDialog pDialog;

@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Getting Data ...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}

@Override
protected JSONObject doInBackground(String... args) {
JSONParser jParser = new JSONParser();
// Getting JSON from URL
JSONObject json = jParser.getJSONFromUrl("http://192.168.43.43/mymobile/getstudentlist.php");
return json;
}

@Override
protected void onPostExecute(JSONObject json) {
pDialog.dismiss();
final ArrayList<String> ids = new ArrayList<String>();
final ArrayList<String> names = new ArrayList<String>();
final ArrayList<String> courses = new ArrayList<String>();
try {
/* THIS IS LINE 74 */ students = json.getJSONArray("students");
for (int i = 0; i < students.length(); i++) {
JSONObject student = students.getJSONObject(i);
ids.add(student.getString("id"));
names.add(student.getString("name"));
courses.add(student.getString("course"));
}
final ListView listView = (ListView) findViewById(R.id.list);
ArrayAdapter<String> adapter = new
ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, android.R.id.text1,
names);

// Assign adapter to ListView
listView.setAdapter(adapter);
// ListView Item Click Listener
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {

// ListView Clicked item value
String stud_id = ids.get(position);
String stud_name = names.get(position);
String stud_course = courses.get(position);

Intent i = new Intent(MainActivity.this, ActivityEditDel.class);
i.putExtra("stud_id", stud_id);
i.putExtra("stud_name", stud_name);
i.putExtra("stud_course", stud_course);
startActivity(i);
}
});

} catch (
JSONException e
)

{
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.menu_main, 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();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

这是 JSON 试图访问的 php 文件。
<?php
$database_name = 'dbstudrec';
$con = mysql_connect('localhost', 'root') or die(mysql_error());
mysql_select_db($database_name) or die(msql_error());

$query = "SELECT * FROM tblstudent";
$result = mysql_query($query);
$rec = array();

while($row = mysql_fetch_assoc($result)){
$rec['students'][] = $row;

}
echo json_encode($rec);
mysql_close($con);

?>

任何帮助将不胜感激。谢谢你。

更新:
我不知道为什么我在这些行上得到空值,但是当我打开 getstudentlist.php 时文件,我得到一个输出。所以肯定有另一个原因它变得空了。

最佳答案

在给定的行中:

protected void onPostExecute(JSONObject json)

json 对象是:
(1) 获取 空值 要么
(2) 关键:- 找不到“学生”在 json 对象中。

对于案例(1):你可以 未指定互联网权限 在 manifest.xml 文件中。
对于案例(2):您需要 检查 jsonObject 数据 通过将 jsonobject 转换为字符串值并使用 textView 在屏幕上显示为:json.tosString()。

注意:对于一个好的编程:
(1) 在您认为异常/语义错误 的任何地方使用 try-catch可能发生。
(2) 如本行 no:74::
students = json.getJSONArray("students");

您已将 json.getJSONArray("students") 的实例分配给学生,这在语法上是正确的,但应避免这样做,因为 json 中的更改也可能反射(reflect)在“学生”中。

而不是这个,你应该这样做:
try{
student.put("key",json.getJSONArray("students"));
}catch(Exception e){...}

关于java - NullPointerException getJSONArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30012292/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com