java - Android Studio php 连接
问题描述
我正在尝试在 android studio java 中使用 php 从 db 获取信息。php 代码 100% 工作。问题是,当我从 Android 模拟器打开应用程序时,应用程序几乎立即自行关闭。
--------- beginning of crash
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.c__expensechart, PID: 2450
java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:121)
at org.json.JSONTokener.nextValue(JSONTokener.java:98)
at org.json.JSONObject.<init>(JSONObject.java:165)
at org.json.JSONObject.<init>(JSONObject.java:182)
at com.example.c__expensechart.MainActivity$Connection.onPostExecute(MainActivity.java:89)
at com.example.c__expensechart.MainActivity$Connection.onPostExecute(MainActivity.java:57)
at android.os.AsyncTask.finish(AsyncTask.java:771)
at android.os.AsyncTask.access$900(AsyncTask.java:199)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:788)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
I/Process: Sending signal. PID: 2450 SIG: 9
这是我在运行时收到的错误消息 Logcat is empty The Build is also error-less 从我看到的 onPostExecute 有一个问题所以让我告诉你它的样子
我有一堂课
class Connection extends AsyncTask<String, String, String>
在其中我有两个功能:
protected String doInBackground(String... params){
String result = "";
String host = "http://192.168.1.114/php_api/GET.php";
try{
HttpClient client = new DefaultHttpClient();
HttpGet request = new HttpGet();
request.setURI(new URI(host));
HttpResponse response = client.execute(request);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
StringBuffer stringBuffer = new StringBuffer("");
String line = "";
while((line = reader.readLine()) != null){
stringBuffer.append(line);
break;
}
reader.close();
result = stringBuffer.toString();
}
catch(Exception e){
return new String("There exception" + e.getMessage());
}
return null;
}
和
protected void onPostExecute(String result){
try {
JSONObject jsonResult = new JSONObject(result);
int success = jsonResult.getInt("success");
if(success == 1){
JSONArray measurements = jsonResult.getJSONArray("measurements");
for(int i = 0; i < measurements.length(); i++){
JSONObject measure = measurements.getJSONObject(i);
int measureId = measure.getInt("id");
double start_times = measure.getDouble("start_times");
double end_times = measure.getDouble("end_times");
double power = measure.getDouble("power");
String line = measureId + ":" + start_times + ":" + end_times + ":" + power;
setMeasureInfo(line);
}
}else{
Toast.makeText(getApplicationContext(), "There aren't any measurements", Toast.LENGTH_SHORT).show();
}
}
catch (JSONException e){
}
}
编辑:关于我建立的数据库连接,它显示了它在文件中读取的所有内容,以确保这就是所说的
{"success":1,
"measurements"[
{"id":"1","start_times":"42405","end_times":"48","power":"65508"}
]}
我的PHP代码:
<?php
$host = 'localhost';
$user = 'root';
$pwd = '';
$db = 'c--db';
$conn = mysqli_connect($host, $user, $pwd, $db);
if(!$conn){
die("ERROR in connection: " . mysqli_connect_error());
}
$response = array();
$sql_query = "SELECT * FROM `measurements`";
$result = mysqli_query($conn, $sql_query);
if(mysqli_num_rows($result) > 0){
$response['success'] = 1;
$measurements = array();
while($row = mysqli_fetch_assoc($result)){
array_push($measurements, $row);
}
$response['measurements'] = $measurements;
}else{
$response['success'] = 0;
$response['message'] = 'No data';
}
echo json_encode($response);
mysqli_close($conn);
?>
解决方案
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“int java.lang.String.length()”
在 com.example.c__expensechart.MainActivity$Connection.onPostExecute(MainActivity.java:89)
JSONArray measurements = jsonResult.getJSONArray("measurements");
for(int i = 0; i < measurements.length(); i++){
...
}
您可能不会在这里检索您的数组。检查密钥是否正确。
推荐阅读
- python - Kivy:无法更改嵌套 GridLayout 的高度
- laravel - Laravel 重定向到另一个页面 401 Unauthorized
- google-apps-script - 如何使用范围“https://www.googleapis.com/auth/script.webapp.deploy”
- spring - Representing Parent Child Relationship in Spring JPA
- javascript - Is it possible to read CSS class attribute value before the class is added to an HTML Element using javascript?
- regex - 替换传入字符串的重复值
- reactjs - 带有 TypeScript 的 React-router,匹配参数始终未定义
- php - 这段代码在 Laravel 5 中不再可行吗?
- r - 在 R 中一起使用 cast 和 split 字符串函数
- mysql - MySQL SQL 创建具有列和行总计的临时表