我正在尝试send data from Android app to Raspberry pi from this link。 我已经完成了它提到的所有步骤,但是当我尝试运行该应用程序时,它给了我一个android studio logcat中的错误。java.lang.NullPointerException:试图在空对象引用上调用虚拟方法'int org.json.JSONObject.getInt(java.lang.String)'
错误类似于:java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法'int org.json.JSONObject.getInt(java.lang.String)'。
与错误的线是102 & 80是
线80: - > INT成功= json.getInt( “成功”);
线102: - >如果(成功== 1)
这是我的Android Studio代码。我在MainActivity.java类得到错误:
MainActivity.java
public class MainActivity extends ActionBarActivity {
private ProgressDialog pDialog;
JSONParser jsonParser = new JSONParser();
EditText editText;
@Override
protected void onDestroy() {
try {
if (pDialog != null && pDialog.isShowing()) {
pDialog.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
}
super.onDestroy();
}
EditText editText2;
String String_name;
String Int_Part;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.Name);
editText2 = (EditText) findViewById(R.id.part_nr);
String_name = editText.getText().toString();
Int_Part = editText2.getText().toString();
}
public void Send(View view) {
new Create_Part().execute();
}
class Create_Part extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Sending part to the database...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<>();
params.add(new BasicNameValuePair("Name", String_name));
params.add(new BasicNameValuePair("part_nr", Int_Part));
JSONObject json = jsonParser.makeHttpRequest("192.168.0.190/db_create.php.php", "POST", params);
try {
int success = json.getInt("success");
if(success == 1){
finish();
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url){
pDialog.dismiss();
}
}
}
logcat的错误:
04-18 16:26:11.493 2818-3010/com.example.androidphp2 E/AndroidRuntime: FATAL
EXCEPTION: AsyncTask #4
Process: com.example.androidphp2, PID: 2818
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:309)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int org.json.JSONObject.getInt(java.lang.String)' on a null object reference
at com.example.androidphp2.MainActivity$Create_Part.doInBackground(MainActivity.java:102)
at com.example.androidphp2.MainActivity$Create_Part.doInBackground(MainActivity.java:80)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
问题在这里'int success = json.getInt(“success”);' –
看起来像'jsonParser.makeHttpRequest(“192.168.0.190/db_create.php.php”,“POST”,params);'返回null – Jens
你没有得到任何回应或者可能是空的响应,这就是为什么你的'json'为空,你正在尝试使用它。在使用'json.getIntent()'之前也要进行空检查。 –