2014-04-23 54 views
-2

现在我正在开发一个需要连接到数据库的应用程序,我试图直接连接android应用程序到MYSQL,但我失败了,很多人说我应该通过PHP来完成。所以在此期间,我正在尝试使用此代码连接到PHP。无法连接到PHP使用android应用程序

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; 
    } 
} 

我呼吁来自另一类这个功能(连接()),但它不工作,它给了我下面的错误消息

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 

和我说

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 

现在它正在使用ASYNC任务,但当我尝试

NNode node = null; 
node.set_temp(jObject.length());  
value4.setText(String.valueOf(tempprogress)) 

我得到以下错误

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) 
+0

给PHP文件的完整路径http://192.168.1.20/Project/index.php – raj

+0

我现在试过并且不工作 – user3563831

+0

@ user3563831你检查了我的答案吗? –

回答

0
Error in http connection android.os.NetworkOnMainThreadException 

上面说你在做网络调用主线程异常状态,你必须这样做,在asynctaskhandler。有一个看看下面的类:

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); 
    } 

} 

调用此asynctask类活动的onCreate()象下面这样:

String my_url = "192.168.1.20/Project/index.php"; 
new ConnectToPHP.execute(my_url); 
+0

它给我新的ConnectToPHP.execute(my_url)错误;它说“它无法解决” – user3563831

+0

把这个asynctask类作为你的活动的子类。然后调用onCreate()或按钮单击。 –

+0

我现在做了它给我java.lang.RuntimeException:执行doInBackground()时发生错误 – user3563831

0

你必须在不同的线程上运行,而不是主要的。

class DownloadJson extends AsyncTask<String, Void, RSSFeed> { 

    private Exception exception; 

    protected DownloadJson doInBackground(String... urls) { 
     // Get Json here 
    } 
} 

或在你的onCreate()补充一点:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 

使用上述作为临时解决方案。否则使用线程或asynctask。

+0

抱歉,我不明白第一个解决方案,你能解释更多吗? – user3563831

+0

学习本教程:http://www.learn2crack.com/2013/10/android-asynctask-json-parsing-example.html – extmkv

相关问题