Java Android从mySql获取数据

Java Android从mySql获取数据,java,php,android,mysql,Java,Php,Android,Mysql,我必须从服务器上的MySQL数据库中获取一些数据。我有以下代码。但是当我运行它时,应用程序崩溃了。即使我在Android清单中指定了INTERNET权限,我也会在我的Logcat中获得被拒绝的权限(缺少INTERNET权限?)。 你知道这里可能出了什么问题吗 Java文件 import android.app.Activity; import android.os.Bundle; import android.os.StrictMode; import android.util.Log; imp

我必须从服务器上的MySQL数据库中获取一些数据。我有以下代码。但是当我运行它时,应用程序崩溃了。即使我在Android清单中指定了INTERNET权限,我也会在我的Logcat中获得被拒绝的权限(缺少INTERNET权限?)。 你知道这里可能出了什么问题吗

Java文件

import android.app.Activity;
import android.os.Bundle;
import android.os.StrictMode;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity {

    TextView text;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);

        connect();
    }
    private void connect() {
        String data;
        List<String> r = new ArrayList<String>();
        ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);
        ListView list=(ListView)findViewById(R.id.listView1);
        try {
            DefaultHttpClient client = new DefaultHttpClient();
            HttpGet request = new HttpGet("http://xxxxx/data.php");
            HttpResponse response = client.execute(request);
            HttpEntity entity=response.getEntity();
            data=EntityUtils.toString(entity);
            Log.e("STRING", data);

            try {

                JSONArray json=new JSONArray(data);
                for(int i=0;i<json.length(); i++)
                {
                    JSONObject obj=json.getJSONObject(i);
                    String name=obj.getString("name");
                    String desc=obj.getString("description");
                   // String lat=obj.getString("lat");
                    Log.e("STRING", name);
                    r.add(name);
                    r.add(desc);
                  //  r.add(lat);
                    list.setAdapter(adapter);

                }

            } catch (JSONException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        } catch (ClientProtocolException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        } catch (IOException e) {
            Log.d("HTTPCLIENT", e.getLocalizedMessage());
        }


    }
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.StrictMode;
导入android.util.Log;
导入android.widget.ArrayAdapter;
导入android.widget.ListView;
导入android.widget.TextView;
导入org.apache.http.HttpEntity;
导入org.apache.http.HttpResponse;
导入org.apache.http.client.ClientProtocolException;
导入org.apache.http.client.methods.HttpGet;
导入org.apache.http.impl.client.DefaultHttpClient;
导入org.apache.http.util.EntityUtils;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
公共类MainActivity扩展了活动{
文本查看文本;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
connect();
}
专用void connect(){
字符串数据;
列表r=新的ArrayList();
ArrayAdapteradapter=新的ArrayAdapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,R);
ListView列表=(ListView)findViewById(R.id.listView1);
试一试{
DefaultHttpClient=新的DefaultHttpClient();
HttpGet请求=新建HttpGet(“http://xxxxx/data.php");
HttpResponse response=client.execute(请求);
HttpEntity=response.getEntity();
数据=EntityUtils.toString(实体);
Log.e(“字符串”,数据);
试一试{
JSONArray json=新的JSONArray(数据);

对于(int i=0;i这是因为您正在从主UI线程连接到MySQL服务器。请创建辅助线程(或异步任务)进行连接并获取结果

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
编写上面的代码并不是一个更好的摆脱的方法。你必须使用任何后台线程来在android api 11以上进行网络操作,例如,等等

您还可以使用网络任务的执行器

Executors.newSingleThreadExecutor().submit(new Runnable() { 
    @Override
    public void run() {
        //You can performed your task here.
    }
});

使用异步任务从数据库获取数据。

在您的
AndroidManifest.xml中添加Internet权限

<uses-permission android:name="android.permission.INTERNET" />
现在创建

 private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
             connect();
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
          ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);
         ListView list=(ListView)findViewById(R.id.listView1);
         list.setAdapter(adapter);
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }
私有类LongOperation扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
connect();
返回“已执行”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
ArrayAdapteradapter=新的ArrayAdapter(getApplicationContext(),android.R.layout.simple\u list\u item\u 1,R);
ListView列表=(ListView)findViewById(R.id.listView1);
list.setAdapter(适配器);
}
@凌驾
受保护的void onPreExecute(){}
@凌驾
受保护的void onProgressUpdate(void…值){}
}
//需要从
connect();
中删除需要值的Ui控件
将其绑定到
onPostExecute

使用异步。有关更多帮助,请检查是否在AndroidManifest.xml中检查您的internet权限?
<uses-permission android:name="android.permission.INTERNET" />
 List<String> r = new ArrayList<String>();
 new LongOperation().execute("");
 private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
             connect();
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
          ArrayAdapter<String>adapter=new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1,r);
         ListView list=(ListView)findViewById(R.id.listView1);
         list.setAdapter(adapter);
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }