duanmei1885 2017-07-27 15:01
浏览 152
已采纳

Listview没有列出数据库中的数据,因为我遇到了异常

I'm trying to get a get data from a database in a listview but when I activate the activity I get back an empty screen .When I check the logcat it shows I see two exceptions :

enter image description here

I don't know why I am getting this issue ,everything seems fine

This is my ShowUsers activity:

package ie.example.artur.adminapp;

import android.content.Intent;
import android.os.Bundle;
import android.os.StrictMode;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toolbar;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;

import android.view.View;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;

import static android.R.attr.name;

/**
 * Created by family on 24/07/2017.
 */

public class ShowUsers extends AppCompatActivity {


    ListView lv;
    //String[] names = {"Amy","John","Joseph","Carl"};
    InputStream is = null;
    String line= null;
    String result = null;
    String temp="";
    String[] arr;



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

        lv = (ListView) findViewById(R.id.lv);

        //Inlfate the list view with the items

        //lv.setAdapter(new ArrayAdapter<String>(ShowUsers.this,android.R.layout.simple_list_item_1,arr));

        android.widget.Toolbar toolbar = (android.widget.Toolbar) findViewById(R.id.toolbar);

        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        //set up the code to fetch data from the database


        try {
            HttpClient httpClient = new DefaultHttpClient();

            HttpPost httpPost = new HttpPost("http://10.3.2.51/www/");

            HttpResponse response = httpClient.execute(httpPost);
            HttpEntity entity = response.getEntity();
            is = entity.getContent();
            //SETUP THE INPUTSTREAM TO RECEIVE THE DATA (INITIAL)
        }catch (Exception e){
            System.out.println("Exception 1 caught");
        }

        try {

            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            // Create a String builder object to hold the data
            StringBuilder sb = new StringBuilder();
            while((line = reader.readLine())!=null)
                sb.append(line+"
");


            //Use the toString() method to get the data in the result

            result = sb.toString();
            is.close();
            //check the data by printing the results in the logcat

            System.out.println("-----Here is my data -----");
            System.out.println(result);

        }catch(Exception e){
            System.out.print("Exception 2 caught");
        }

        try{

            JSONArray jsonArray = new JSONArray(result);//Create a json array
            int count = jsonArray.length();


            for(int i=0; i<count; i++){
                //create a json object to extract the data
                JSONObject json_data = jsonArray.getJSONObject(i);
                temp +=json_data.getString("name")+":";
                //where name is attribute of the getdata table
                //using ':' as the delimiter

            }

            //Afer receiving everything store the contents in a string array from temo separated using the delimiter
            arr = temp.split(":");
            //set the list adapter with the array arr

            lv.setAdapter(new ArrayAdapter<String>(ShowUsers.this,android.R.layout.simple_list_item_1, arr));

        }catch(Exception e){
            System.out.println("I am really bored of writing all these exception blocks");
        }



    }
    public boolean onCreateOptionsMenu(Menu menu)
    {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        {
            switch (item.getItemId())
            {
                case R.id.action_settings : startActivity (new Intent(this, ShowUsers.class));
                    break;
            }
            return super.onOptionsItemSelected(item);
        }}




}

This is tut.php that connects the database to the app:

<?php

$con=mysql_connect("localhost","root","");
mysql_select_db("socialmedia_website",$con);

$r=mysqli_query("select name from users where 1)";

while($row=mysql_fetch_array($r))

    {

        $out[]=$row;
    }

    print(json_encode($out));
    mysql_close($con)

Full stack trace:

07-27 15:50:18.152 10602-10602/ie.example.artur.adminapp I/art: Late-enabling -Xcheck:jni
07-27 15:50:18.152 10602-10602/ie.example.artur.adminapp I/art: VMHOOK: rlim_cur : 0 pid:10602
07-27 15:50:18.233 10602-10602/ie.example.artur.adminapp W/System: ClassLoader referenced unknown path: /data/app/ie.example.artur.adminapp-1/lib/arm
07-27 15:50:18.324 10602-10602/ie.example.artur.adminapp W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
07-27 15:50:18.821 10602-10639/ie.example.artur.adminapp I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8226_LA.BF.1.1.3_RB1__release_AU (I8c58819290)
                                                                       OpenGL ES Shader Compiler Version: E031.29.00.00
                                                                       Build Date: 01/24/16 Sun
                                                                       Local Branch: 
                                                                       Remote Branch: quic/LA.BF.1.1.3_rb1.9
                                                                       Local Patches: NONE
                                                                       Reconstruct Branch: NOTHING
07-27 15:50:19.331 10602-10602/ie.example.artur.adminapp I/InputMethodManager: [startInputInner] EditorInfo { packageName=ie.example.artur.adminapp, inputType=0x20001, imeOptions=0x44000006, privateImeOptions=null }, windowGainingFocus=android.view.ViewRootImpl$W@3ad066e, mServedView=android.support.v7.widget.AppCompatEditText{a91c21f VFED..CL. .F....I. 32,318-232,406 #7f0c006f app:id/editTextPassword}, mServedInputConnectionWrapper=android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@fb5710f
07-27 15:50:26.856 10602-10602/ie.example.artur.adminapp I/ListPopupWindow: Could not find method setEpicenterBounds(Rect) on PopupWindow. Oh well.
07-27 15:50:26.886 10602-10602/ie.example.artur.adminapp W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
07-27 15:51:33.375 10602-10602/ie.example.artur.adminapp I/System.out: Exception 1 caught
07-27 15:51:33.394 10602-10602/ie.example.artur.adminapp I/System.out: Exception 2 caughtI am really bored of writing all these exception blocks
07-27 15:51:33.400 10602-10602/ie.example.artur.adminapp I/Choreographer: Skipped 3794 frames!  The application may be doing too much work on its main thread.
07-27 15:54:58.497 10602-10609/ie.example.artur.adminapp W/art: Suspending all threads took: 11.806ms
  • 写回答

1条回答 默认 最新

  • dongxiezhuo8852 2017-07-27 15:47
    关注

    Do you have internet permission? If not, add it to the Manifest as mentioned in this answer.

    <manifest xlmns:android...>
     ...
     <uses-permission android:name="android.permission.INTERNET" />
     <application ...
    </manifest>
    

    If this doesn't work, try printing the stacktrace. In your catch method add the following line anywhere:

    e.printStackTrace();
    

    The Apache Http client is deprecated now btw. I would recommend you to use OkHttp or the HttpURLConnection class.

    Disabling StrictMode is also a bad practice.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器