无法从数据库中获取数据?
问题描述:
当我运行我的应用程序时,它总是给我“无效的IP”,无法从数据库中获取数据。 我是一个新手,所以我不知道有关android。 我从谷歌获得此代码无法从数据库中获取数据?
以下是我的代码段代码,请帮助我。
public class EnterGeneralDetails extends Activity {
InputStream is=null;
String result=null;
String line=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_general_details);
try
{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://thecapitalcitychurch.16mb.com/new/CohortName.php");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
Log.e("Pass 1", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 1", e.toString());
Toast.makeText(getApplicationContext(), "Invalid IP Address",
Toast.LENGTH_LONG).show();
}
try
{
BufferedReader reader = new BufferedReader
(new InputStreamReader(is,"iso-8859-1"),8);
StringBuilder sb = new StringBuilder();
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.e("Pass 2", "connection success ");
}
catch(Exception e)
{
Log.e("Fail 2", e.toString());
}
try
{
JSONArray JA=new JSONArray(result);
JSONObject json= null;
final String[] str1 = new String[JA.length()];
final String[] str2 = new String[JA.length()];
for(int i=0;i<JA.length();i++)
{
json=JA.getJSONObject(i);
str1[i] = json.getString("ID");
str2[i]=json.getString("Cohort_Name");
}
final Spinner sp = (Spinner) findViewById(R.id.spinner22);
List<String> list = new ArrayList<String>();
for(int i=0;i<str2.length;i++)
{
list.add(str2[i]);
}
Collections.sort(list);
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>
(getApplicationContext(), android.R.layout.simple_spinner_item, list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(dataAdapter);
sp.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> arg0, View arg1,int position, long id)
{
// TODO Auto-generated method stub
String item=sp.getSelectedItem().toString();
Toast.makeText(getApplicationContext(), item,
Toast.LENGTH_LONG).show();
Log.e("Item",item);
}
public void onNothingSelected(AdapterView<?> arg0)
{
// TODO Auto-generated method stub
}
});
}
catch(Exception e)
{
Log.e("Fail 3", e.toString());
}
}
}
PHP代码
<?php
$DB_USER='u868549735_rj';
$DB_PASS='myself00';
$DB_HOST='mysql.hostinger.in';
$DB_NAME='u868549735_db';
$mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
$mysqli->query("SET NAMES 'utf8'");
$sql="SELECT ID, Cohort_Name FROM Cohorts";
$result=$mysqli->query($sql);
while($e=mysqli_fetch_array($result)){
$output[]=$e;
}
print(json_encode($output));
$mysqli->close();
?>
答
至于我可以看到你已经有了一个NetworkOnMainThreadException。当您尝试在主线程上执行任何网络操作时,会发生这种情况。
当应用程序尝试在其主线程上执行联网操作时引发的异常。
这仅适用于定位到Honeycomb SDK或更高版本的应用程序。针对早期SDK版本的应用程序允许在其主要事件循环线程上进行联网,但非常不鼓励。请参阅文档Designing for Responsiveness。
要解决这个问题,看看AsyncTask。
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i/(float) count) * 100)); // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
一旦建立,任务是非常简单的执行:
new DownloadFilesTask().execute(url1, url2, url3);
PS: 使用Log.e("Fail 1", e.toString());
被认为是不好的做法。改用e.printStackTrace()。
你在日志上得到了这个输出连接成功吗? –
没有......谢谢 – RBrb
我曾访问过该网站 http://thecapitalcitychurch.16mb.com/new/CohortName.php 它表明它已阻止我的IP,去一些验证。那个过程也没有反应。所以问题在于你的服务器。改变你的主机,你把你的'CohortName.php' –