使用Android应用程序无法连接到PHP

编程入门 行业动态 更新时间:2024-10-28 12:22:25
本文介绍了使用Android应用程序无法连接到PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

现在我正在发展,需要连接到数据库的应用程序,我试图将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(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(j​​Object.length());value4.setText(将String.valueOf(tempprogress))

我收到以下错误

E / JSON解析器(3336):错误分析数据org.json.JSONException:价值与LT; java.lang.String类型的DOCTYPE不能转换到的JSONObjectE / ActivityManager(714):应用程序崩溃!工艺:com.climacon.androidappE / AndroidRuntime(3336):致命异常:主要E / AndroidRuntime(3336):工艺:com.climacon.androidapp,PID:3336E / AndroidRuntime(3336):显示java.lang.NullPointerExceptionE / 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("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

本文发布于:2023-11-01 17:27:46,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1549948.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:连接到   应用程序   Android   PHP

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!