NullPointerException:尝试在空对象引用上调用虚拟方法 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)'

NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)' on a null object reference

我需要帮助为数据库创建一个 php 文件以将其附加到我的服务器并将其用于 json parsing.also 我不知道如何创建特定的 json 与 php 文件有关。我只想创建一个应用程序来从服务器获取文本数据。 ** 关于如何在其 json 中创建 php 的任何信息都将非常有帮助。**

这是我的MainActivity.javaclass

public class MainActivity extends ActionBarActivity implements View.OnClickListener {

private TextView textViewJSON;
private Button buttonGet;
private Button buttonParse;

public static final String MY_JSON ="MY_JSON";

private static final String JSON_URL = "\n" +
        "http://file-manager.000webhost.com/file-manager/index.php";

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

    textViewJSON = (TextView) findViewById(R.id.textViewJSON);
    textViewJSON.setMovementMethod(new ScrollingMovementMethod());
    buttonGet = (Button) findViewById(R.id.buttonGet);
    buttonParse = (Button) findViewById(R.id.buttonParse);
    buttonGet.setOnClickListener(this);
    buttonParse.setOnClickListener(this);
}


@Override
public void onClick(View v) {
    if(v==buttonGet){
        getJSON(JSON_URL);
    }

    if(v==buttonParse){
        showParseActivity();
    }
}

private void showParseActivity() {
    Intent intent = new Intent(this, ParseJSON.class);
    intent.putExtra(MY_JSON,textViewJSON.getText().toString());
    startActivity(intent);
}


private void getJSON(String url) {
    class GetJSON extends AsyncTask<String, Void, String>{
        ProgressDialog loading;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            loading = ProgressDialog.show(MainActivity.this, "Please Wait...",null,true,true);
        }

        @Override
        protected String doInBackground(String... params) {

            String uri = params[0];

            BufferedReader bufferedReader = null;
            try {
                URL url = new URL(uri);
                HttpURLConnection con = (HttpURLConnection) url.openConnection();
                StringBuilder sb = new StringBuilder();

                bufferedReader = new BufferedReader(new InputStreamReader(con.getInputStream()));

                String json;
                while((json = bufferedReader.readLine())!= null){
                    sb.append(json+"\n");
                }

                return sb.toString().trim();

            }catch(Exception e){
                return null;
            }

        }

        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            loading.dismiss();
            textViewJSON.setText(s);
        }
    }
    GetJSON gj = new GetJSON();
    gj.execute(url);
}
}

这是我的ParserJson.javaclass

public class ParseJSON extends ActionBarActivity implements   View.OnClickListener{

private String myJSONString;

private static final String JSON_ARRAY ="result";
private static final String ID = "id";
private static final String USERNAME= "name";

private JSONArray users = null;

private int TRACK = 0;

private EditText editTextId;
private EditText editTextUserName;
private EditText editTextPassword;

Button btnPrev;
Button btnNext;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_parse_json);

    Intent intent = getIntent();
    myJSONString = intent.getStringExtra(MainActivity.MY_JSON);


    editTextId = (EditText) findViewById(R.id.editTextID);
    editTextUserName = (EditText) findViewById(R.id.editTextUsername);
    editTextPassword = (EditText) findViewById(R.id.editTextPassword);

    btnPrev = (Button) findViewById(R.id.buttonPrev);
    btnNext = (Button) findViewById(R.id.buttonNext);

    btnPrev.setOnClickListener(this);
    btnNext.setOnClickListener(this);

    extractJSON();

    showData();
}



private void extractJSON(){
    try {
        JSONObject jsonObject = new JSONObject(myJSONString);
        //users =new JSONArray(JSON_ARRAY);
        users = jsonObject.getJSONArray(JSON_ARRAY);
      //  JSONObject jsonObject =users.getJSONObject(0);
    } catch (JSONException e) {
        e.printStackTrace();
    }
}

private void moveNext(){
    if(TRACK<users.length()){
        TRACK++;
    }
    showData();
}

private void movePrev(){
    if(TRACK>0){
        TRACK--;
    }
    showData();
}

private void showData(){
    try {
        JSONObject jsonObject = users.getJSONObject(TRACK);

        editTextId.setText(jsonObject.getString(ID));
        editTextUserName.setText(jsonObject.getString(USERNAME));

    } catch (JSONException e) {
        e.printStackTrace();
    }

}


@Override
public void onClick(View v) {
    if(v == btnNext){
        moveNext();
    }
    if(v == btnPrev){
        movePrev();
    }
}
}

这是我的 php 文件,存储在文件 public html 文件夹中 manager.i 也不知道在哪里存储这个文件,它告诉我的数据库。我的 php 文件的名称是 mark42.php 但它保存为 index.php.

<?php
define('HOST','mysql9.000webhost.com');
define('USER','**********');
define('PASS','******');
define('DB','a4023522_db');$con = mysqli_connect(HOST,USER,PASS,DB);    $sql = "select * from mark42";
$res = mysqli_query($con,$sql);
$result = array();
while($row = mysqli_fetch_array($res)){
array_push($result,array('id'=>$row[0],'name'=>$row[1]));
}
echo json_encode(array("result"=>$result));
mysqli_close($con);
?>

这是我的 logcat 错误,当我按下 parsejson 按钮时应用程序崩溃。

    FATAL EXCEPTION: main Process: test.nic.com.nicpro, PID: 6506
java.lang.RuntimeException: Unable to start activity ComponentInfo{test.nic.com.nicpro/test.nic.com.nicpro.ParseJSON}: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONObject org.json.JSONArray.getJSONObject(int)' on a null object reference
at test.nic.com.nicpro.ParseJSON.showData(ParseJSON.java:94)
at test.nic.com.nicpro.ParseJSON.onCreate(ParseJSON.java:62)
at android.app.Activity.performCreate(Activity.java:6251)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
at android.app.ActivityThread.-wrap11(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
JSONObject jsonObject = users.getJSONObject(TRACK)

正在抛出 NullPointerException。这意味着您的行:

users = jsonObject.getJSONArray(JSON_ARRAY);

正在将 users 设置为 null。仔细检查该数组是否确实存在于您的对象中,并且您没有不小心使用了错误的键

您需要学习如何使用调试器。

设置断点:

JSONObject jsonObject = new JSONObject(myJSONString);

然后运行你的程序处于调试模式。

当它停在那条线上时,将鼠标悬停在 myJSONString 上并查看值是什么。可以肯定的是,这不是您所期望的。