使用Android应用程序无法连接到PHP [英] Cannot connect to PHP using android application
问题描述
现在我正在发展,需要连接到数据库的应用程序,我试图将Android应用程序直接连接到MySQL,但我失败了,人很多说我应该这样做来用PHP。所以在平均时间我想这code连接到PHP。
包com.climacon.androidapp;进口java.io.BufferedReader中;
进口的java.io.InputStream;进口java.io.InputStreamReader中;
进口org.apache.http.HttpEntity;
进口org.apache.http.Htt presponse;
进口org.apache.http.client.HttpClient;
进口org.apache.http.client.methods.HttpPost;
进口org.apache.http.impl.client.DefaultHttpClient;
进口org.json.JSONException;
进口org.json.JSONObject;进口android.util.Log;公共类Phpmysql {
公共静态的JSONObject连接(字符串URL){
InputStream为= NULL;
字符串结果=;
JSONObject的jArray = NULL; // URL从下载JSON数据
尝试{
HttpClient的HttpClient的=新DefaultHttpClient();
HttpPost httppost =新HttpPost(http://192.168.1.20/Project/);
HTT presponse响应= httpclient.execute(httppost);
HttpEntity实体= response.getEntity();
是= entity.getContent(); }赶上(例外五){
Log.e(log_tag,在HTTP连接错误+ e.toString());
} //响应转换成字符串
尝试{
读者的BufferedReader =新的BufferedReader(新的InputStreamReader(
是,ISO-8859-1),8);
StringBuilder的SB =新的StringBuilder();
串线= NULL;
而((行= reader.readLine())!= NULL){
sb.append(行+\\ n);
}
is.close();
结果= sb.toString();
}赶上(例外五){
Log.e(log_tag,错误转换结果+ e.toString());
} 尝试{ jArray =新的JSONObject(结果);
}赶上(JSONException E){
Log.e(log_tag,错误分析数据+ e.toString());
} 返回jArray;
}
}
我呼吁从另一个类此功能(连接()),但它不工作,它给了我以下错误消息
错误http连接android.os.NetworkOnMainThreadException
错误转换结果显示java.lang.NullPointerException:锁== NULL
解析错误数据org.json.JSONException:在字符输入0结束
和我添加
<使用许可权的android:NAME =android.permission.INTERNET对/>
<使用许可权的android:NAME =android.permission.ACCESS_NETWORK_STATE/>
现在,它正在使用异步任务,但是当我尝试
NNode节点= NULL;
node.set_temp(jObject.length());
value4.setText(将String.valueOf(tempprogress))
我收到以下错误
E / JSON解析器(3336):错误分析数据org.json.JSONException:价值与LT; java.lang.String类型的DOCTYPE不能转换到的JSONObject
E / ActivityManager(714):应用程序崩溃!工艺:com.climacon.androidapp
E / AndroidRuntime(3336):致命异常:主要
E / AndroidRuntime(3336):工艺:com.climacon.androidapp,PID:3336
E / AndroidRuntime(3336):显示java.lang.NullPointerException
E / AndroidRuntime(3336):在com.climacon.androidapp.climatemonitor $ ConnectToPHP.onPostExecute(climatemonitor.java:83)
E / AndroidRuntime(3336):在com.climacon.androidapp.climatemonitor $ ConnectToPHP.onPostExecute(climatemonitor.java:1)
E / AndroidRuntime(3336):在android.os.AsyncTask.finish(AsyncTask.java:632)
E / AndroidRuntime(3336):在android.os.AsyncTask.access $ 600(AsyncTask.java:177)
E / AndroidRuntime(3336):在android.os.AsyncTask $ InternalHandler.handleMessage(AsyncTask.java:645)
E / AndroidRuntime(3336):在android.os.Handler.dispatchMessage(Handler.java:102)
E / AndroidRuntime(3336):在android.os.Looper.loop(Looper.java:157)
E / AndroidRuntime(3336):在android.app.ActivityThread.main(ActivityThread.java:5872)
E / AndroidRuntime(3336):在java.lang.reflect.Method.invokeNative(本机方法)
E / AndroidRuntime(3336):在java.lang.reflect.Method.invoke(Method.java:515)
E / AndroidRuntime(3336):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1069)
E / AndroidRuntime(3336):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
E / AndroidRuntime(3336):在dalvik.system.NativeStart.main(本机方法)
在http连接android.os.NetworkOnMainThreadException错误
以上说的你在做网络调用主线程异常状态,你必须这样做,在的AsyncTask
或处理程序
。看看下面的类:
类ConnectToPHP扩展的AsyncTask<字符串,字符串,字符串>
{
@覆盖
在preExecute保护无效()
{
// TODO自动生成方法存根
//显示进度对话框这里
super.on preExecute();
} @覆盖
保护字符串doInBackground(字符串... PARAMS)
{
// TODO自动生成方法存根
的JSONObject jObject = Phpmysql.connections(PARAMS [0]);
的System.out.println(jObject.toString());
//做你的code在这里
返回null;
} @覆盖
保护无效onPostExecute(字符串结果)
{
// TODO自动生成方法存根
//解雇进度对话框这里
super.onPostExecute(结果);
}}
调用此的AsyncTask
类的onCreate()
象下面这样的活动:
字符串my_url =192.168.1.20/Project/index.php;
新ConnectToPHP.execute(my_url);
Now I was developing an application which requires connection to a database, I tried to connect the android application directly to MYSQL but I failed and alot of people said that I should do it through PHP. So in the mean time I am trying this code to connect to a PHP.
package com.climacon.androidapp;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
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.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class Phpmysql {
public static JSONObject connections (String url) {
InputStream is = null;
String result = "";
JSONObject jArray = null;
// Download JSON data from URL
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://192.168.1.20/Project/");
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
} catch (Exception e) {
Log.e("log_tag", "Error in http connection " + e.toString());
}
// Convert response to string
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
} catch (Exception e) {
Log.e("log_tag", "Error converting result " + e.toString());
}
try {
jArray = new JSONObject(result);
} catch (JSONException e) {
Log.e("log_tag", "Error parsing data " + e.toString());
}
return jArray;
}
}
And I call this function (connections()) from another class but it doesn't work and it gives me the following error message
Error in http connection android.os.NetworkOnMainThreadException
Error converting result java.lang.NullPointerException: lock == null
Error parsing data org.json.JSONException: End of input at character 0 of
and I added
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Now it is working using the ASYNC task but when i try
NNode node = null;
node.set_temp(jObject.length());
value4.setText(String.valueOf(tempprogress))
i get the following error
E/JSON Parser(3336): Error parsing data org.json.JSONException: Value <!DOCTYPE of type java.lang.String cannot be converted to JSONObject
E/ActivityManager(714): App crashed! Process: com.climacon.androidapp
E/AndroidRuntime(3336): FATAL EXCEPTION: main
E/AndroidRuntime(3336): Process: com.climacon.androidapp, PID: 3336
E/AndroidRuntime(3336): java.lang.NullPointerException
E/AndroidRuntime(3336): at com.climacon.androidapp.climatemonitor$ConnectToPHP.onPostExecute(climatemonitor.java:83)
E/AndroidRuntime(3336): at com.climacon.androidapp.climatemonitor$ConnectToPHP.onPostExecute(climatemonitor.java:1)
E/AndroidRuntime(3336): at android.os.AsyncTask.finish(AsyncTask.java:632)
E/AndroidRuntime(3336): at android.os.AsyncTask.access$600(AsyncTask.java:177)
E/AndroidRuntime(3336): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
E/AndroidRuntime(3336): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(3336): at android.os.Looper.loop(Looper.java:157)
E/AndroidRuntime(3336): at android.app.ActivityThread.main(ActivityThread.java:5872)
E/AndroidRuntime(3336): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(3336): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(3336): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1069)
E/AndroidRuntime(3336): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
E/AndroidRuntime(3336): at dalvik.system.NativeStart.main(Native Method)
Error in http connection android.os.NetworkOnMainThreadException
Above exception state that you are doing network calling on main thread, you have to do it in asynctask
or handler
. Have a look at below class:
class ConnectToPHP extends AsyncTask<String, String, String>
{
@Override
protected void onPreExecute()
{
// TODO Auto-generated method stub
// show progress dialog here
super.onPreExecute();
}
@Override
protected String doInBackground(String... params)
{
// TODO Auto-generated method stub
JSONObject jObject = Phpmysql.connections(params[0]);
System.out.println(jObject.toString());
// do your code here
return null;
}
@Override
protected void onPostExecute(String result)
{
// TODO Auto-generated method stub
// dismiss progress dialog here
super.onPostExecute(result);
}
}
Call this asynctask
class in onCreate()
of activity like below:
String my_url = "192.168.1.20/Project/index.php";
new ConnectToPHP.execute(my_url);
这篇关于使用Android应用程序无法连接到PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!