【问题标题】:Android App not showing data from remote MySql Server [duplicate]Android App不显示来自远程MySql Server的数据[重复]
【发布时间】: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 中。

我的应用程序现在不显示错误,但也不显示任何数据。有什么建议吗?

编辑”!!!

现在一切正常!谢谢

【问题讨论】:

标签: java android


【解决方案1】:

请从 onCreate 方法中移除数组适配器初始化。

    void initArrayAdapter(){
        if (data != null){
            adapter= new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data);
                lv.setAdapter(adapter);
        }
    }

在getData()方法中调用该方法

 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");
        }
        //call it here
        initArrayAdapter();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

这样数据不会为空。在您的实现中,如果在获取数据时抛出异常。 onCreate() 方法将继续使用空数据设置适配器。将推荐使用 Volley 库从服务器获取数据。

【讨论】:

  • 感谢您的努力!应用程序现在不显示错误,但也不显示任何数据。它向我显示了一个空白活动。有什么建议可以解决这个问题吗?
  • 请查看您提供的数据链接。 data[i] = jo.getString("Name");“名称”键没有字符串值@rakesh indida
  • 我现在改变了它,它可以工作了!谢谢!
  • 嗨@AshishPardhiye!你能给我一些帮助吗stackoverflow.com/questions/65677770/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
  • 2019-03-20
相关资源
最近更新 更多