Есть ли способ отобразить записи базы данных в один за другим текстовые представления я без использования списков - PullRequest
0 голосов
/ 02 марта 2020

Я хочу напечатать указанные c данные, возвращаемые запросом sql, в android приложение. Здесь я хочу вернуть две записи, используя запрос лимита. Это означает, что всякий раз, когда я ставлю какое-то условие на запрос выбора, этот тип записи будет отображаться в текстовом представлении. Может ли кто-нибудь, пожалуйста, помогите мне просмотреть данные, возвращаемые запросом на лимит для одного текстового просмотра без использования списков просмотра.

Вот мой код

MainActivity.java

package com.example.readtoapp;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    ListView listView;

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

        listView = (ListView) findViewById(R.id.listView);
        getJSON("http://192.168.1.15:8080/api/getdata.php");
    }


    @SuppressLint("NewApi")
    private void getJSON(final String urlWebService) {

        @SuppressLint("NewApi")
        class GetJSON extends AsyncTask<Void, Void, String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }


            @Override
            protected void onPostExecute(String s) {
                super.onPostExecute(s);
                Toast.makeText(getApplicationContext(), s, Toast.LENGTH_SHORT).show();
                try {
                    loadIntoListView(s);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            protected String doInBackground(Void... voids) {
                try {
                    URL url = new URL(urlWebService);
                    HttpURLConnection con = (HttpURLConnection) url.openConnection();
                    StringBuilder sb = new StringBuilder();
                    BufferedReader 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;
                }
            }
        }
        GetJSON getJSON = new GetJSON();
        getJSON.execute();
    }

    private void loadIntoListView(String json) throws JSONException {
        JSONArray jsonArray = new JSONArray(json);
        String[] heroes = new String[jsonArray.length()];
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject obj = jsonArray.getJSONObject(i);
            heroes[i] = obj.getString("name");
        }
        ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, heroes);
        listView.setAdapter(arrayAdapter);
    }
}`

А ниже php file

<?php
$servername = "localhost";
$username = "root";
$password = "";
$database = "android";

$conn = new mysqli($servername, $username, $password, $database);

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$heroes = array(); 
$sql = "SELECT id, name FROM heroes limit 1;";
$stmt = $conn->prepare($sql);
$stmt->execute();
$stmt->bind_result($id, $name);
while($stmt->fetch()){ 
    $temp = [
        'id'=>$id,
        'name'=>$name
    ]; 
    array_push($heroes, $temp);
}
echo json_encode($heroes);
?>

1 Ответ

0 голосов
/ 02 марта 2020

В вашем Activity_main. xml замените ListView для использования TextView и измените id на nameTv.

и обновите этот код:

TextView nameTv;

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

    nameTv = (TextView) findViewById(R.id.nameTv);
    getJSON("http://192.168.1.15:8080/api/getdata.php");
}

private void loadIntoListView(String json) throws JSONException {
    JSONArray jsonArray = new JSONArray(json);
    String[] heroes = new String[jsonArray.length()];
    for (int i = 0; i < jsonArray.length(); i++) {
        JSONObject obj = jsonArray.getJSONObject(i);
        heroes[i] = obj.getString("name");
    }
    nameTv.setText(heroes[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...