我试图从列表视图中的数据库获取数据但是当我激活活动时,我得到一个空屏幕。当我检查logcat时,它显示我看到两个例外:
我不知道为什么我会遇到这个问题,一切似乎都很好
这是我的ShowUsers活动:
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+"\n");
//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);
}}
}
这是将数据库连接到应用程序的tut.php:
<?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)
完整堆栈跟踪:
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
答案 0 :(得分:0)
你有互联网许可吗?如果没有,请将其添加到this answer中提到的清单中。
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET" />
<application ...
</manifest>
如果这不起作用,请尝试打印堆栈跟踪。在catch方法中,在以下任何位置添加以下行:
e.printStackTrace();
现在不推荐使用Apache Http客户端了。我建议你使用OkHttp或HttpURLConnection类。
禁用StrictMode也是一种不好的做法。