【发布时间】:2018-02-21 12:18:08
【问题描述】:
我是安卓编程新手。我正在尝试在 android 应用程序中显示我的在线 MySQL 数据库中的一些数据。我正在观看并关注 youtube 上的教程。因为我收到错误,所以这里有些不对劲。我已经搜索了 2 天,但似乎找不到解决方案。在我看来,数据没有正确地从服务器传输到应用程序。如果我改变String[] data;到String[] data = new String[0]程序正常启动,但是没有显示数据。
我的问题是:
我的 PHP 文件 (JSON) 正确吗?我只是想打印出文本。
我的服务器地址正确吗?
String address="http://multijugate-beings.000webhostapp.com/conn.php";
我的 ArrayAdapter 代码对吗?
ArrayAdapter<String> adapter;
adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
lv.setAdapter(adapter);
我该如何解决这个问题?
请看下面的代码:
conn.php 代码:
我的 PHP 文件:http://multijugate-beings.000webhostapp.com/conn.php
[{"0":"1","ID":"1","1":"Notranjska","Kraj":"Notranjska","2":"2018-02-27","Datum":"2018-02-27","3":"Cirkus asfiads","Naslov":"Cirkus asfiads","4":"dasifjodsaufnhldsjlif fj uie6fhsjecd","opis":"dasifjodsaufnhldsjlif fj uie6fhsjecd","5":"www.d.d.","Povezava":"www.d.d."},{"0":"3","ID":"3","1":"Notranjska","Kraj":"Notranjska","2":"2018-02-26","Datum":"2018-02-26","3":"top asfiads","Naslov":"top asfiads","4":"dasivbif fj uie6fhsjecd","opis":"dasivbif fj uie6fhsjecd","5":"www.d.d.","Povezava":"www.d.d."}]
我的 android studio Java 类:
package com.example.rok.testprvastran;
import android.os.StrictMode;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Gorenjska extends AppCompatActivity {
ListView lv;
ArrayAdapter<String> adapter;
String address="http://multijugate-beings.000webhostapp.com/conn.php";
InputStream is = null;
String line=null;
String result=null;
String[] data;
JSONObject jo = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gorenjska);
lv=(ListView) findViewById(R.id.lvgor);
StrictMode.setThreadPolicy((new StrictMode.ThreadPolicy.Builder().permitNetwork().build()));
getData();
adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
lv.setAdapter(adapter);
}
private void getData() {
try {
URL url = new URL(address);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");
is = new BufferedInputStream(con.getInputStream());
} catch (Exception e) {
e.printStackTrace();
}
try {
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
e.printStackTrace();
}
try {
JSONArray ja = new JSONArray(result);
data = new String[ja.length()];
for (int i = 0; i < ja.length(); i++) {
jo = ja.getJSONObject(i);
data[i] = jo.getString("Name");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
错误堆栈跟踪:
02-21 11:00:19.884 19111-19111/com.example.rok.testprvastran E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.rok.testprvastran, PID: 19111
java.lang.NullPointerException
at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394)
at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362)
at android.widget.AbsListView.obtainView(AbsListView.java:2306)
at android.widget.ListView.makeAndAddView(ListView.java:1790)
at android.widget.ListView.fillDown(ListView.java:691)
at android.widget.ListView.fillFromTop(ListView.java:752)
at android.widget.ListView.layoutChildren(ListView.java:1630)
at android.widget.AbsListView.onLayout(AbsListView.java:2130)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.support.constraint.ConstraintLayout.onLayout(ConstraintLayout.java:1197)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.support.v7.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:443)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1673)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1527)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1436)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:453)
at android.widget.FrameLayout.onLayout(FrameLayout.java:388)
at android.view.View.layout(View.java:14898)
at android.view.ViewGroup.layout(ViewGroup.java:4646)
at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2032)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1789)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1044)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5896)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5118)
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:789)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
at dalvik.system.NativeStart.main(Native Method)
编辑!!!
感谢这个很棒的社区,我已经部分修复了! 我从 OnCreate 中删除了 arrayadapter 并制作了一个新的:
void initArrayAdapter(){
if (data != null) {
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data);
lv.setAdapter(adapter);
}}
我添加了 initArrayAdapter();在 getData 中。
我的应用程序现在不显示错误,但也不显示任何数据。有什么建议吗?
编辑”!!!
现在一切正常!谢谢
【问题讨论】:
-
我建议使用 volley 来做这个,它更容易获取和发布,如果你愿意我可以给你一个如何使用它的例子
-
用它来检查你的json是否有效jsonformatter.curiousconcept.com
-
可以吗?这真的会帮助我。
-
数据[i] = jo.getString("Name"); - 它是你的代码。但是在你的响应 JSON 文件中没有这个键值。我想知道你从 JSON 结果中获取哪个值。